Python 3.x 只进行一次握手

Python 3.x 只进行一次握手,python-3.x,https,handshake,urlopen,Python 3.x,Https,Handshake,Urlopen,我使用urllib.request.urlopen通过HTTPS从服务器获取数据。该函数被多次调用到同一服务器,通常调用到完全相同的url。然而,与标准web浏览器在初始请求时执行握手不同,调用单独的urlopenurl将导致每次调用都进行新的握手。这在高延迟网络上非常慢。是否有一种方法可以执行一次握手并重用现有连接进行进一步通信 我无法修改服务器代码以使用套接字或其他协议。您应该为它打开一个流,因为HTTP/s是无状态的,它会为每个连接向服务器打开新的套接字 因此,这种逻辑是不可能的,但我只是

我使用urllib.request.urlopen通过HTTPS从服务器获取数据。该函数被多次调用到同一服务器,通常调用到完全相同的url。然而,与标准web浏览器在初始请求时执行握手不同,调用单独的urlopenurl将导致每次调用都进行新的握手。这在高延迟网络上非常慢。是否有一种方法可以执行一次握手并重用现有连接进行进一步通信


我无法修改服务器代码以使用套接字或其他协议。

您应该为它打开一个流,因为HTTP/s是无状态的,它会为每个连接向服务器打开新的套接字

因此,这种逻辑是不可能的,但我只是四处搜索以打开持久连接。我只是希望这会有所帮助。它提到了urllib2


您正在为每个请求打开一个新连接。要重新使用连接,您需要使用:

或者使用推荐的python,该python使用了持久连接

>>> import http.client
>>> conn = http.client.HTTPSConnection("www.python.org")
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> print(r1.status, r1.reason)
200 OK
>>> data1 = r1.read()  # This will return entire content.
>>> # The following example demonstrates reading data in chunks.
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> while not r1.closed:
...     print(r1.read(200)) # 200 bytes
b'<!doctype html>\n<!--[if"...
...
>>> # Example of an invalid request
>>> conn.request("GET", "/parrot.spam")
>>> r2 = conn.getresponse()
>>> print(r2.status, r2.reason)
404 Not Found
>>> data2 = r2.read()
>>> conn.close()