尝试在Python(WSGI)和NodeJS + Express应用程序之间发出POST请求。他们在不同的服务器上。Python中的HTTP POST请求的行为不一致
的问题是,使用不同的IP地址(即,专用网络与公用网络)时,在公共网络上的urllib2
请求成功,但是专用网络相同的请求失败,502 Bad Gateway
或URLError [32] Broken pipe
。
的urllib2
代码我使用的是这样的:
req = urllib2.Request(url, "{'some':'data'}", {'Content-Type' : 'application/json; charset=utf-8'})
res = urllib2.urlopen(req)
print f.read()
现在,我也编码这样的要求,使用requests
:
r = requests.post(url, headers = {'Content-Type' : 'application/json; charset=utf-8'}, data = "{'some':'data'}")
print r.text
,并获得200 OK
响应。这种替代方法适用于两个网络。
我有兴趣了解是否需要某个urllib2
请求的一些额外配置,或者我需要查看一些可能丢失的网络配置(我不相信这个是这种情况,因为替代请求方法有效,但我肯定是错的)。
任何建议或指针与此将不胜感激。谢谢!
如果比较两者发送的标题,它们将不会相同。 (例如'request'默认为'Accept-Encoding:gzip,deflate,compress',而'urllib'为'Accept-Encoding:identity'。)捕获每个版本的请求头,并使用服务器,例如'nc',看看它是如何响应的。无论是关于'urllib2'头文件导致502错误,或者它正在做一些重定向/等。 urllib2所理解的请求不会。 – abarnert
另外...如果它与'requests'一起工作,是否有一个原因,你不能只使用'requests'? – abarnert
['urllib2.Request'](http://docs.python.org/2/library/urllib2.html#urllib2.Request)的文档指出* data *参数应该被urlencoded为* application/x- WWW窗体-urlencoded *。 –