簡體   English   中英

python-requests-通過帶方括號名稱的POST表單發送不起作用

[英]python-requests - Sending via POST form with square brackets names doesn't work

我正在嘗試通過HTML表單將test [key1] = val1和test [key2] = val42發送到服務器。
相應的HTML將是:

<input type="text" name="test[key1]" value="val1" />
<input type="text" name="test[key2]" value="val42" />

(順便說一句,我想知道這種形式的正確名稱。)

>>> import requests, json
>>> params = { 'test' : { 'key1' : 'val1', 'key2' : 'val42' } }
>>> r = requests.post('http://httpbin.org/post', data=params)
>>> json.loads(r.text)['form']
{u'test': [u'key2', u'key1']}

發布數據已被拉平,我們得到了鍵,但是丟失了值val1和val42

我以為python-requests會自動處理帶有嵌入鍵的params json,事實並非如此。

您需要使用方括號編寫params

>>> params = { 'test[key1]' : 'val1', 'test[key2]' : 'val42' }
>>> r = requests.post('http://httpbin.org/post', data=params)
>>> json.loads(r.text)['form']
{u'test[key1]': u'val1', u'test[key2]': u'val42'}

希望這會幫助某人。

默認情況下,HTML表單無法序列化,因為它們不支持嵌套。 使用formencode類的庫,尤其是variabledecode模塊,可以將表單數據序列化/反序列化為json。

https://github.com/formencode/formencode/blob/master/formencode/variabledecode.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM