Python 为requests.Session()对象设置主机和端口

Python 为requests.Session()对象设置主机和端口,python,python-requests,Python,Python Requests,如何配置Session()对象,使通过它的所有请求使用相同的主机和端口 目前,我将做以下工作: urls = [f'https://somehost.com:1234/query?page={i}' for i in range(10)] s = requests.Session() for url in urls: r = s.get(url) 没有办法显式设置持久连接的主机和端口吗?例如: s = requests.Session() s.host = 'https://someh

如何配置
Session()
对象,使通过它的所有请求使用相同的主机和端口

目前,我将做以下工作:

urls = [f'https://somehost.com:1234/query?page={i}' for i in range(10)]
s = requests.Session()
for url in urls:
    r = s.get(url)
没有办法显式设置持久连接的主机和端口吗?例如:

s = requests.Session()
s.host = 'https://somehost.com'
s.port = '1234'

从有关会话的
请求
文档中:

Session对象允许您跨多个会话持久化某些参数 请求。它还将cookie持久化到从服务器发出的所有请求中 会话实例,并将使用urllib3的连接池。所以如果 您正在向同一主机(底层TCP)发出多个请求 连接将被重用,这可能会导致严重的错误 性能提高(请参阅HTTP持久连接)

所以当你每次都给出url的时候。引擎盖下的请求不会为每个请求创建新的TCP套接字连接。它将重用与此主机的TCP套接字连接以及连接池中的端口


会话背后的主要思想是在每个请求之间共享参数和cookie,而不必在每个请求中单独设置它们。在引擎盖下,它将保持连接。但是你仍然需要在每次调用中给出完整的URL

是什么让你认为它没有使用相同的主机和端口?@ChrisDoyle我并不认为它没有,但每次我提交请求时,主机和端口都是URL的一部分。它在感兴趣的字符串中是显式的,但在对象中不是显式的,我认为显式设置它比隐式设置它更好。例如,如果我设置了主机和端口,然后输入了错误的URL,我可能会从该
会话中检索到错误。
请求.Session
类不会为其构造函数提供任何参数,因此您必须在每个请求中指定主机/端口。不过,您可能可以创建一个简单的包装器类,让您可以这样做。那么,如果会话保持与主机a的连接,但向其提供了主机B的URL,会发生什么情况?它是结束主机A的持久化还是两者都持久化?否连接池中将保留到主机A的TCP连接,并且将创建并使用到主机B的TCP连接,然后将其放入池中,因此现在池中有两个连接。一个到主机A,一个到主机B。