如果您需要访问这些低级别属性使用的插座上,你就必须重载一些对象。
首先,你需要创建的HTTPHandler一个子类,在标准库做:
class HTTPHandler(AbstractHTTPHandler):
def http_open(self, req):
return self.do_open(httplib.HTTPConnection, req)
http_request = AbstractHTTPHandler.do_request_
正如你所看到的,它采用了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()
调用Web服务器时,你为什么把它??? – jgauffin
我在特定时间轮询一个网站,当时应该发布一些信息。速度非常重要,因此设置TCP_NODELAY可避免在发送数据包之前将小部分数据累积到更大的部分。 –
*什么*'小部分数据'? HTTP请求几乎肯定会在单个send()中由库来刷新,并由TCP作为单个数据包发送。并且在您的最后设置TCP_NODELAY不会改变对端发送响应的方式。不是一个真正的问题。 – EJP