请求shopify域(python)引发SSLError

时间:2017-12-22 16:58:39

标签: python python-requests

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

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'

当我申请其他网站时,它可以正常工作。

2 个答案:

答案 0 :(得分:2)

这看起来更像是SSL问题而不是Python问题。您还没有向我们展示您的代码,因此我在此进行了一些猜测,但看起来您所连接的网站正在提供的SSL证书与您的主机名不匹配&# 39;重新使用。这里的解决方案通常是:

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

讨论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,它是否正常运行?

答案 1 :(得分:0)

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

session.get("http://www.packershoes.com", headers=headers, verify=False)