jSON形式のデータでurllib2を使用してPOSTリクエストを行う方法を教えてくれるチュートリアルを教えてもらえますか?
Messaの答えは、サーバーがcontent-typeヘッダーを確認することに煩わされていない場合にのみ機能します。本当に機能させるには、content-typeヘッダーを指定する必要があります。コンテンツタイプヘッダーを含めるように修正されたMessaの回答を次に示します。
import json
import urllib2
data = json.dumps([1, 2, 3])
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
response = f.read()
f.close()
UrllibがContent-Lengthを把握するために使用しているものはすべて、jsonによって混乱しているように見えるため、それを自分で計算する必要があります。
import json
import urllib2
data = json.dumps([1, 2, 3])
clen = len(data)
req = urllib2.Request(url, data, {'Content-Type': 'application/json', 'Content-Length': clen})
f = urllib2.urlopen(req)
response = f.read()
f.close()
これを理解するために永遠に私を連れて行ったので、私はそれが他の誰かを助けることを願っています。
例-JSONとしてエンコードされたデータをPOST data:
import json
import urllib2
data = json.dumps([1, 2, 3])
f = urllib2.urlopen(url, data)
response = f.read()
f.close()
JSON応答を読み取るには、json.loads()
を使用します。これがサンプルです。
import json
import urllib
import urllib2
post_params = {
'foo' : bar
}
params = urllib.urlencode(post_params)
response = urllib2.urlopen(url, params)
json_response = json.loads(response.read())
あなたは確かに適切なAjaxリクエストを得るためにヘッダーをハックしたい:
_headers = {'X_REQUESTED_WITH' :'XMLHttpRequest',
'ACCEPT': 'application/json, text/javascript, */*; q=0.01',}
request = urllib2.Request(path, data, headers)
response = urllib2.urlopen(request).read()
_
そしてjson.loadsにPOST=サーバー側で。
編集:ところで、送信する前に urllib.urlencode(mydata_dict)
する必要があります。そうしないと、POSTはサーバーが期待するものになりません
これは私のために働いたものです:
import json
import requests
url = 'http://xxx.com'
payload = {'param': '1', 'data': '2', 'field': '4'}
headers = {'content-type': 'application/json'}
r = requests.post(url, data = json.dumps(payload), headers = headers)