嘗試在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 *。 –