1
我有蟒蛇實現使用100 PUT一個簡單的HTTP服務器繼續:蟒蛇停留在100 HTTP客戶端繼續
class TestHandler(SimpleHTTPRequestHandler):
def do_PUT(self):
length = int(self.headers.get('Content-Length'))
self.send_response_only(100)
self.end_headers()
data = self.rfile.read(length)
res = manipulate(data)
new_length = len(res)
self.send_response(200)
self.send_header("Content-Length", new_length)
self.end_headers()
self.wfile.write(res)
server = HTTPServer(("localhost", 8080), TestHandler)
server.serve_forever()
我嘗試使用該客戶端來連接到服務器:
def send_put(data):
c = HTTPConnection('localhost', 8080)
c.request('PUT', 'http://localhost:8080/', headers={'Content-Length': len(data), 'Expect': '100-continue'})
r = c.getresponse()
if 100 != r.status:
return
c.request('PUT', 'http://localhost:8080/', body=data)
r = c.getresponse()
print(r.read())
但是即使我可以在wireshark上看到100個繼續響應,代碼也總是陷入第一個'getresponse'中,我在這裏做錯了什麼? python http甚至支持100-繼續?
編輯:在看了一些python http代碼後,我發現爲什麼getresponse卡住了; Python的HTTP只是忽略了100繼續並永遠不會出現的下一個等待響應(來自python3.4/HTTP/client.py):
# read until we get a non-100 response
while True:
version, status, reason = self._read_status()
if status != CONTINUE:
break
# skip the header from the 100 response
while True:
skip = self.fp.readline(_MAXLINE + 1)
if len(skip) > _MAXLINE:
raise LineTooLong("header line")
skip = skip.strip()
if not skip:
break
if self.debuglevel > 0:
print("header:", skip)
您是否嘗試過發送'wget localhost:8080'。也試着用'sudo'運行你的python代碼..我運行你的代碼並得到了'AttributeError:TestHandler實例沒有'send_response_only'屬性。另外AFAIK python請求不支持100-繼續 –
你用python3運行它嗎? send_response_only被添加到python 3.2中以支持100次繼續。 – CforLinux