2014-10-28 40 views
2

我的印象是,使用x-www-form-urlencoded規範的POSTS應該在帖子正文中發送URL編碼的參數字符串。然而,當我這樣做Python請求模塊發送JSON字符串而不是x-www-form-urlencoded參數字符串

data = json.dumps({'param1': 'value1', 'param2': 'value2'}) 
Requests.post(url, data=data) 

在接收端請求的身體看起來是這樣的:

{"param1": "value1", "param2": "value2"} 

但我希望得到這個

param1=value1&param2=value2 

我怎樣才能請求以第二種形式發送數據?

回答

9

你得到JSON的原因是因爲你明確地調用json.dumps來生成一個JSON字符串。只是不這樣做,你不會得到一個JSON字符串。換句話說,你的第一行改成這樣:

data = {'param1': 'value1', 'param2': 'value2'} 

由於the docs解釋,如果你傳遞一個字典作爲data值,這將是形式編碼的,而如果你傳遞一個字符串,它會被髮送原樣。


例如,在一個終端窗口:

$ nc -kl 8765 

在另一:

$ python3 
>>> import requests 
>>> d = {'spam': 20, 'eggs': 3} 
>>> requests.post("http://localhost:8765", data=payload) 
^C 
>>> import json 
>>> j = json.dumps(payload) 
>>> requests.post("http://localhost:8765", data=j) 
^C 

在第一終端,你會看到一個第一請求體是這樣的(和Content-Type application/x-www-form-urlencoded):

spam=20&eggs=3 

...而第二個是這個(並沒有內容類型):

{"spam": 20, "eggs": 3} 
相關問題