是否可以在python请求主机名中添加端口号?

时间:2019-03-14 17:38:41

标签: python-3.x ssl request openssl python-requests

我看过一些帖子,建议使用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适配器安装到请求会话中指定端口号的方法是正确的吗?

1 个答案:

答案 0 :(得分:0)

requests.Session()中已注册(安装)的HTTP适配器不区分大小写地仅通过最长字符串前缀进行匹配。如果您希望适配器将其应用到以字符串https://google.com:443开头的网址,则可以正确使用它。

主机名后面的语法:port是指定使用端口的正确方法。如果没有:port,则使用默认的方案 。对于https方案,默认为端口443,因此在URL中使用:443是多余的。

但是,在安装适配器时,没有进行规范化,因此前缀'https://google.com:443'https://google.com/不匹配,即使两者都使用相同的主机名和端口。