gpt4 book ai didi

python - 使用 urllib2 加载 URL 时如何设置 TCP_NODELAY 标志?

转载 作者:太空狗 更新时间:2023-10-29 17:26:40 25 4
gpt4 key购买 nike

我正在使用 urllib2 加载网页,我的代码是:

httpRequest = urllib2.Request("http:/www....com")
pageContent = urllib2.urlopen(httpRequest)
pageContent.readline()

如何获取套接字属性以设置 TCP_NODELAY

在普通套接字中我会使用函数:

socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

最佳答案

如果您需要访问所用套接字上的此类低级属性,则必须重载一些对象。

首先,您需要创建 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()

关于python - 使用 urllib2 加载 URL 时如何设置 TCP_NODELAY 标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13699973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com