我看过一些帖子,建议使用python请求指定端口号,只需将其添加到主机后即可: 例如“ google.com:443”(我想使https请求端口443)。
但是,我不确定如果使用requests.Session()
会怎样?
在这种情况下,我指定了一个适配器(受益于this post的代码)
myCiphers = "AES128-SHA" +":"+ "AES256-SHA"
class myAdapter(HTTPAdapter):
def init_poolmanager(self, *args, **kwargs):
context = create_urllib3_context(ciphers=myCiphers)
kwargs['ssl_context'] = context
return super(myAdapter, self).init_poolmanager(*args, **kwargs)
def proxy_manager_for(self, *args, **kwargs):
context = create_urllib3_context(ciphers=defaultCiphers)
kwargs['ssl_context'] = context
return super(myAdapter, self).proxy_manager_for(*args, **kwargs)
myhost = 'https://google.com:443'
s = requests.Session()
s.mount(myhost,myAdapter())
response = s.get(myhost,verify=False,timeout=1)
代码似乎可以正常工作,但是这些库有些棘手,而且在将主机安装到适配器上时,恐怕这种指定帖子编号的方法不正确。
有经验的人可以确认上述通过HTTP适配器安装到请求会话中指定端口号的方法是正确的吗?
答案 0 :(得分:0)
requests.Session()
中已注册(安装)的HTTP适配器不区分大小写地仅通过最长字符串前缀进行匹配。如果您希望适配器将其应用到以字符串https://google.com:443
开头的网址,则可以正确使用它。
主机名后面的语法:port
是指定使用端口的正确方法。如果没有:port
,则使用默认的方案 。对于https
方案,默认为端口443,因此在URL中使用:443
是多余的。
但是,在安装适配器时,没有进行规范化,因此前缀'https://google.com:443'
与https://google.com/
不匹配,即使两者都使用相同的主机名和端口。