Python requests私のWebの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)
最もRESPのAPIドキュメントに記述されている標準的な方法であるため、コマンドラインで再現するcurl
コマンドを構築することは、一般的な方法である、見ます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+)。 –
ありがとう、サンプルコードは今まで私にとっては十分です。実際に使用されています。 –