请求shopify域(python)引发SSLError

问题描述 投票:1回答:2

我正在尝试向shopify商店提出GET请求,packershoes如下:

endpoint = "http://www.packershoes.com" 
print session.get(endpoint, headers=headers)

当我对网站运行get请求时,我收到以下错误:

File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 467, in get
    return self.request('GET', url, **kwargs)

File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 455, in request
    resp = self.send(prep, **send_kwargs)

File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 558, in send
    r = adapter.send(request, **kwargs)

File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 385, in send
    raise SSLError(e)

requests.exceptions.SSLError: hostname 'packershoes.com' doesn't match either of '*.myshopify.com', 'myshopify.com'

当我请求不同的网站时,它工作正常。

python python-requests
2个回答
2
投票

这看起来更像是SSL问题而不是Python问题。你没有向我们展示你的代码,所以我在这里做了一些猜测,但看起来你所连接的网站提供的SSL证书与你正在使用的主机名不符。这里的决议通常是:

  • 查看是否存在您应该/可能使用的与证书中的主机名匹配的备用主机名,
  • 将问题报告给您尝试访问的站点,并查看其结尾是否存在配置错误,或者
  • 在代码中禁用证书验证。你真的不想这样做,因为它会打开你的代码直到中间人攻击。

这是讨论in the requests documentation

更新

仔细看看你的问题,我注意到我自己无法重现这个问题。 www.packershoes.com提供的证书显然适用于*.myshopify.com,但我没有得到任何证书错误,大概是因为该地址实际上是packer-shoes.myshopify.com的别名

$ host www.packershoes.com
www.packershoes.com is an alias for packer-shoes.myshopify.com.
packer-shoes.myshopify.com is an alias for shops.myshopify.com.
shops.myshopify.com has address 23.227.38.64

我想知道您的问题是否与您正在使用的requests版本或本地DNS配置中的某些内容无关。如果你用www.packershoes.com替换你的请求中的packer-shoes.myshopify.com,它是否正常工作?


0
投票

请求验证HTTPS请求的SSL证书,就像Web浏览器一样。默认情况下,启用SSL验证,如果验证无法验证证书,则Requests将抛出SSLError,您已将验证设置为False:

session.get("http://www.packershoes.com", headers=headers, verify=False)
© www.soinside.com 2019 - 2024. All rights reserved.