如何使用Python执行cURL命令?

我想在Python中执行一个curl命令。

通常,我只需要在终端输入命令,然后按回车键。但是,我不知道它在Python中是如何工作的。

命令如下所示:

curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

有一个request.json文件被发送以获得响应。

我找了很多遍,结果搞糊涂了。我试着写了一段代码,尽管我不能完全理解它,它没有工作。

import pycurl
import StringIO


response = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere')
c.setopt(c.WRITEFUNCTION, response.write)
c.setopt(c.HTTPHEADER, ['Content-Type: application/json','Accept-Charset: UTF-8'])
c.setopt(c.POSTFIELDS, '@request.json')
c.perform()
c.close()
print response.getvalue()
response.close()

错误信息是Parse Error。如何正确地从服务器获得响应?

788558 次浏览
import requests
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
data = requests.get(url).json

也许?

如果您正在尝试发送文件

files = {'request_file': open('request.json', 'rb')}
r = requests.post(url, files=files)
print r.text, print r.json

啊,谢谢@LukasGraf,现在我更好地理解了他原来的代码是做什么的

import requests,json
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
my_json_data = json.load(open("request.json"))
req = requests.post(url,data=my_json_data)
print req.text
print
print req.json # maybe?

为了简单起见,你应该考虑使用请求库。

JSON响应内容的示例如下:

import requests
r = requests.get('https://github.com/timeline.json')
r.json()

如果你寻找进一步的信息,在快速入门部分,他们有很多工作的例子。

对于特定的旋度平移:

import requests


url = 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere'
payload = open("request.json")
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
r = requests.post(url, data=payload, headers=headers)
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

它的Python实现是这样的:

import requests


headers = {
'Content-Type': 'application/json',
}


params = {
'key': 'mykeyhere',
}


with open('request.json') as f:
data = f.read().replace('\n', '')


response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search', params=params, headers=headers, data=data)

检查this link,它将帮助将cURL命令转换为Python、PHP和Node.js

我的答案是WRT python 2.6.2。

import commands


status, output = commands.getstatusoutput("curl -H \"Content-Type:application/json\" -k -u (few other parameters required) -X GET https://example.org -s")


print output

我很抱歉没有提供必要的参数,因为这是机密。

这是一种方法:

Import os
import requests
Data = os.execute(curl URL)
R= Data.json()

使用curlconverter.com。它几乎可以将任何curl命令转换为Python, Node.js, PHP, R, Go等等。

例子:

curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/asdfasdfasdf

在Python中变成这样

import requests


json_data = {
'text': 'Hello, World!',
}


response = requests.post('https://hooks.slack.com/services/asdfasdfasdf', json=json_data)

我有这个确切的问题,因为我必须做一些事情来检索内容,但我所拥有的只是一个旧版本的Python,它对SSL的支持不足。如果你用的是老式MacBook,你就知道我在说什么了。在任何情况下,curl在shell中运行良好(我怀疑它链接了现代SSL支持),所以有时你想在不使用requestsurllib.request的情况下做到这一点。

你可以使用subprocess模块来执行curl并获取检索到的内容:

import subprocess


# 'response' contains a []byte with the retrieved content.
# use '-s' to keep curl quiet while it does its job, but
# it's useful to omit that while you're still writing code
# so you know if curl is working
response = subprocess.check_output(['curl', '-s', baseURL % page_num])

Python 3的subprocess模块也包含带有许多有用选项的.run()

我使用os库。

import os


os.system("sh script.sh")

script.sh只包含旋度。

PYTHON 3

仅适用于UNIX (Linux / Mac) (!)

使用Python 3执行cURL并解析其JSON数据。

import shlex
import json
import subprocess


# Make sure that cURL has Silent mode (--silent) activated
# otherwise we receive progress data inside err message later
cURL = r"""curl -X --silent POST http://www.test.testtestest/ -d 'username=test'"""


lCmd = shlex.split(cURL) # Splits cURL into an array


p = subprocess.Popen(lCmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate() # Get the output and the err message


json_data = json.loads(out.decode("utf-8"))


print(json_data) # Display now the data

有时你还需要在UNIX上安装这些依赖项,如果你遇到奇怪的错误:

# Dependencies
sudo apt install libcurl4-openssl-dev libssl-dev
sudo apt install curl

如果你的操作系统支持卷曲,你可以这样做:

import os


os.system("curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere")

我用这种方式…我想你也可以用这个!

顺便说一下..模块"os"是在安装python时自动安装。 su,你不需要安装包;)

使用请求库..这段代码是:

curl -LH "Accept: text/x-bibliography; style=apa" https://doi.org/10.5438/0000-0C2G

等于这个:

import requests


headers = {
'Accept': 'text/x-bibliography; style=apa',
}


r = requests.get('https://doi.org/10.5438/0000-0C2G', headers=headers)




print(r.text)