0

HTTP POST を送信すると、keep-alive に設定されたヘッダー「connection」の値が送信パケットで「close」になります。

私が使用しているヘッダーは次のとおりです。

multipart_header = {        
                        'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Firefox/17.0',
                        'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                        'accept-language':'en-US,en;q=0.5',
                        'accept-encoding':'gzip, deflate',
                        'connection':'keep-alive',

                        'content-type':'multipart/form-data; boundary='+boundary,
                        'content-length':''
        }


## command to send the header: 
urllib.request.Request('http://localhost/api/image/upload', data=byte_data, headers=multipart_header)

POST パケットをキャプチャすると、予想される「キープアライブ」ではなく、接続フィールドが「クローズ」になることがわかります。ここで何が起こっているのですか?

4

2 に答える 2

1

http://docs.python.org/dev/library/urllib.request.html言います:

urllib.request モジュールは HTTP/1.1 を使用し、HTTP 要求に Connection:close ヘッダーを含めます。

おそらくこれは理にかなっています-urllib.requestには実際のキープアライブ接続用のTCPソケットを実際に保存する機能がないため、このヘッダーをオーバーライドすることはできません。

https://github.com/kennethreitz/requestsはサポートしているようですが、私はこれを使用していません。

于 2012-12-19T08:58:22.697 に答える
0

urllib永続的な接続をサポートしていません。送信するヘッダーとデータが既にある場合は、http.clienthttp 接続を再利用できます。

from http.client import HTTPConnection

conn = HTTPConnection('localhost', strict=True)
conn.request('POST', '/api/image/upload', byte_data, headers)
r = conn.getresponse()
r.read() # should read before sending the next request
# conn.request(...

HTTP サーバーへの urllib.request 接続の持続性を参照してください。

于 2012-12-19T09:55:59.077 に答える