使用されているソケットでこのような低レベルのプロパティにアクセスする必要がある場合は、いくつかのオブジェクトをオーバーロードする必要があります。
まず、標準ライブラリで行うHTTPHandlerのサブクラスを作成する必要があります。
class HTTPHandler(AbstractHTTPHandler):
def http_open(self, req):
return self.do_open(httplib.HTTPConnection, req)
http_request = AbstractHTTPHandler.do_request_
ご覧のとおり、接続を開くために a を使用しています...メソッドHTTPConnection
をアップグレードするには、それもオーバーライドする必要があります;) 。connect()
このようなものは良いスタートになるはずです:
class LowLevelHTTPConnection(httplib.HTTPConnection):
def connect(self):
httplib.HTTPConnection.connect(self)
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
class LowLevelHTTPHandler(HTTPHandler):
def http_open(self, req):
return self.do_open(LowLevelHTTPConnection, req)
urllib2 は、いくつかのハンドラーをサブクラス化して使用できるほどスマートです。このためにurllib2.build_openerが作成されています。
urllib2.install_opener(urllib2.build_opener(LowLevelHTTPHandler)) # tell urllib2 to use your HTTPHandler in replacement of the standard HTTPHandler
httpRequest = urllib2.Request("http:/www....com")
pageContent = urllib2.urlopen(httpRequest)
pageContent.readline()