2013-03-22 48 views
1

根據http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3客戶端在POST(在需要此頭的HTTP 1.1服務器上)之前必須等待100(繼續)狀態。HTTP 1.1期望頭握手

我不明白Python如何做到這一點。例如:

conn = httplib.HTTPConnection(url) 
conn.putrequest('POST', page) 
conn.putheader(...) 
conn.putheader('Expect', '100-continue') 
conn.endheaders() 

現在,我看不出有其他選項,然後發送數據:

conn.send(data) 

在這種情況下,我得到的錯誤,請求響應時:

error: [Errno 10053] An established connection was aborted by the software in your host machine 

我怎麼能要求狀態100,以便我可以發送數據?

+1

我不認爲'httplib'支持這一(非常好);請參閱[this' requests' ticket](https://github.com/kennethreitz/requests/issues/713)中的討論(特別是*,並且可以以打破httplib *備註的方式儘早關閉套接字)。 – 2013-03-22 11:54:27

+0

如果您讀取異常消息,您將看到連接已中止。網絡好嗎?你拉了網線嗎?有DPI的防火牆可以阻止POST POST請求嗎? – 2013-03-22 11:56:51

+0

我想我們不能期望在這種情況下有意義的例外。我對我的網絡沒有任何問題,例如Java中的相同代碼按預期工作。 – theta 2013-03-22 11:59:50

回答

2

我不認爲httplib支持這(很好);看到討論this requests ticket,具體

,並可以在休息的方式httplib的

該評論的作者早關閉套接字,奧吉法克勒(durin42)也提到了自己的httpplus library

source code顯示快速瀏覽承諾不正確處理Expect: 100-Continue

# handle 100-continue response 
hdrs, body = self.raw_response.split(self._end_headers, 1) 
http_ver, status = hdrs.split(' ', 1) 
if status.startswith('100'): 
    self.raw_response = body 
    self.continued = True 
    logger.debug('continue seen, setting body to %r', body) 
    return 
+0

謝謝你。如果沒有你的評論,我永遠不會找到這個圖書館。使用httpplus而不是urllib2解決了一個類似的問題,我需要支持100個繼續。 – 2014-07-16 15:46:57