Python requests是一个很好的模块,以减轻我的网络REST API访问编程,我通常不喜欢下面如何构建来自python请求模块的curl命令?
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
r = requests.post(url, data=json.dumps(payload), headers=headers)
当有错误出现,我想看看它后面发生什么。构建curl
命令在命令行再现是常见的方式,因为这是
try:
r = requests.post(url, data=json.dumps(payload), headers=headers)
except Exception as ex:
print "try to use curl command below to reproduce"
print curl_request(url,"POST",headers,payload)
这将是很好我可以生成此请求curl
命令样品,其最在RESP API文献中描述的标准方法,参见在libcloud's debug中很好的例子,我找不到一个简单的方法来构建,下面是我想自己创建的方法。
# below code is just pseudo code, not correct
def curl_request(url,method,headers,payloads):
# construct curl sample from requests' structure
# $ curl -v -H "Accept: application/json" -H "Content-type: application/json"
# -d '{"some":"data"}'
# -X POST https://api.github.com/some/endpoint
request = "curl -v "
for header in headers:
print header
request = request + '-H "' + header + ": " + headers[header] + '" '
for payload in payloads:
request = request + '-d {} "' + payload + ": " + payloads[payload] + '" '
request = request + "-X %s %s" % (method,url)
return request
这也将是很好,如果我们在requests
有方法已经
下面是最终的解决方案得到了答案,我的作品。在此处显示以供参考
def curl_request(url,method,headers,payloads):
# construct the curl command from request
command = "curl -v -H {headers} {data} -X {method} {uri}"
data = ""
if payloads:
payload_list = ['"{0}":"{1}"'.format(k,v) for k,v in payloads.items()]
data = " -d '{" + ", ".join(payload_list) + "}'"
header_list = ['"{0}: {1}"'.format(k, v) for k, v in headers.items()]
header = " -H ".join(header_list)
print command.format(method=method, headers=header, data=data, uri=url)
谢谢,这是我想要在示例代码中做的事情,但它变得很复杂,因为我需要处理不同类型的数据,上面的头[头]可能是整数,你可以粘贴你的示例代码我参考? –
如果你将整数传递给请求而没有得到异常,我不知道你在做什么。我可以在我的答案中加入一些示例代码,它可以在需要工作的python版本上工作(即2.6+) –
谢谢,您的示例代码对我来说已经足够好了,并且我使用代码I在现实中使用。 –