Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 400错误的请求,urllib2用于POST_Python_Rest_Http Post_Urllib2_Urllib - Fatal编程技术网

Python 400错误的请求,urllib2用于POST

Python 400错误的请求,urllib2用于POST,python,rest,http-post,urllib2,urllib,Python,Rest,Http Post,Urllib2,Urllib,我两天来一直在苦苦挣扎,只使用urllib&urllib2发出一个post请求。我在使用curl或requests库时有一些限制,因为我需要部署代码的机器不支持这些 post调用将伴随一个标头和json正文。我可以打任何get电话,但使用数据和标题的POST会抛出400个错误请求。尝试并应用了google/stackoverflow中的所有可用选项,但没有解决任何问题 下面是示例代码:-- 在设置调试处理程序时,以下是可以跟踪的请求格式:-- 请注意,相同的post请求对于任何REST客户机和请

我两天来一直在苦苦挣扎,只使用urllib&urllib2发出一个post请求。我在使用curl或requests库时有一些限制,因为我需要部署代码的机器不支持这些

post调用将伴随一个标头和json正文。我可以打任何get电话,但使用数据和标题的POST会抛出400个错误请求。尝试并应用了google/stackoverflow中的所有可用选项,但没有解决任何问题

下面是示例代码:--

在设置调试处理程序时,以下是可以跟踪的请求格式:--


请注意,相同的post请求对于任何REST客户机和请求库都非常有效。在调试处理程序输出中,如果我们看到,json结构是内容类型:
application/json\r\n\r\n操作=myaction&PressType=Format1&Target=%2Fabc%2Fdef
,这可能是个问题

您可以转储json而不是对其进行编码。我也面对着同样的问题,解决了

删除
data=urllib.urlencode(body)
并使用
urllib2.urlopen(req,json.dumps(data))


这应该可以解决。

您是特别想使用urllib还是我也应该使用请求模块?@akashkarothiya:-引用问题:-“我在使用curl或请求库时有限制”:)非常感谢。它至少解决了格式400错误请求问题。:)
import urllib
import urllib2

url = 'https://1.2.3.4/rest/v1/path'
headers = {'X-Auth-Token': '123456789sksksksk111',
           'Content-Type': 'application/json'}
body = {'Action': 'myaction',
        'PressType': 'Format1', 'Target': '/abc/def'}
data = urllib.urlencode(body)
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request, data)
send: 'POST /rest/v1/path HTTP/1.1\r\nAccept-Encoding: identity\r\nContent-Length: 52\r\nHost: 1.2.3.4\r\nUser-Agent: Python-urllib/2.7\r\nConnection: close\r\nX-Auth-Token: 123456789sksksksk111\r\nContent-Type: application/json\r\n\r\nAction=myaction&PressType=Format1&Target=%2Fabc%2Fdef'

reply: 'HTTP/1.1 400 Bad Request\r\n'