【发布时间】:2016-08-11 07:16:04
【问题描述】:
我从 2 天开始就只使用 urllib 和 urllib2 进行发布请求。我在使用 curl 或 requests 库时受到限制,因为我需要部署我的代码的机器不支持其中任何一个。
post 调用会附带一个 Header 和 json Body。我可以拨打任何电话,但带有数据和标题的 POST 会引发 400 个错误请求。尝试并应用了 google/stackoverflow 中可用的所有选项,但没有解决!
下面是示例代码:--
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'
请注意,对于任何 REST 客户端和 Requests 库,相同的发布请求都可以正常工作。在调试处理程序输出中,如果我们看到,json 结构是 Content-Type:application/json\r\n\r\nAction=myaction&PressType=Format1&Target=%2Fabc%2Fdef,这可能是个问题!
【问题讨论】:
-
你是特别想使用 urllib 还是我也应该使用 request 模块?
-
@akashkarothiya:- 引用问题:- “我在使用 curl 或 requests 库方面有限制”:)
标签: python rest http-post urllib2 urllib