请求模块:将数据发布到远程主机,发送错误的值

时间:2016-09-16 07:56:43

标签: python

我的字符串如下:

{
    'singleQuesResponses': {
        '28': '',
        '14': '',
        '27': '',
        '26': ''
    },
    'org_apache_struts_taglib_html_TOKEN': 'a1553f25303435076412b5ca7299b936',
    'quesResponses': {
        'some': 'data'
    }
}

当我在pyhton请求中发布它时,如:

data = json.loads(data)
page = requests.post('http://localhost/chilivery/index.php', data=data, cookies=bcookies)

然后评价该帖子是这样的:

array(3) { ["quesResponses"]=> string(4) "some" ["singleQuesResponses"]=> string(2) "14" ["org_apache_struts_taglib_html_TOKEN"]=> string(32) "a1553f25303435076412b5ca7299b936" }

但我希望:

array(3) { ["quesResponses"]=> array["some"=>'data'] ["singleQuesResponses"]=> string(2) "14" ["org_apache_struts_taglib_html_TOKEN"]=> string(32) "a1553f25303435076412b5ca7299b936" }

我的意思是为什么有些'是不是按值发送数组,并且它的唯一第一个键是作为字符串发送的?

2 个答案:

答案 0 :(得分:0)

它应该如何运作。将数据参数设置为dict将使请求模块尝试使用以下命令发送它:

Content-Type: application/x-www-form-urlencoded

它只接受字典的第一级并在体内编码为x = data& y = other_data。

您应该使用json.dumps(data)对对象进行编码,或者直接将其分配给json参数。

requests.post(url, json=data)

这将Content-Type标头设置为application / json

OR

requests.post(url, data=json.dumps(data))

这不会设置Content-Type标题。

答案 1 :(得分:0)

在这种情况下,唯一的方法是使用Get发送数据,而不是使用数据发布数据;你可以在请求模块中使用params。