当前位置: 首页 > 面试题库 >

Python请求获取SSLerror

邹华池
2023-03-14
问题内容

尝试使用Requests会话发出一个简单的get请求,但是我一直在获取特定网站的SSLerror。我认为问题可能出在网站上(我使用https://www.ssllabs.com进行了扫描,结果下降了),但是我不确定,因为我对该领域一无所知:)我想了解发生了什么。

一个解决方案/解释将是巨大的,谢谢!

编码:

import requests

requests.get('https://www.reporo.com/')

我收到下一个错误:

SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

---------------------------------------------------------------------------
SSLError                                  Traceback (most recent call last)
<ipython-input-7-cfc21b287fee> in <module>()
----> 1 requests.get('https://www.reporo.com/')

/usr/local/lib/python2.7/dist-packages/requests/api.pyc in get(url, **kwargs)
     63 
     64     kwargs.setdefault('allow_redirects', True)
---> 65     return request('get', url, **kwargs)
     66 
     67

/usr/local/lib/python2.7/dist-packages/requests/api.pyc in request(method, url, **kwargs)
     47 
     48     session = sessions.Session()
---> 49     response = session.request(method=method, url=url, **kwargs)
     50     # By explicitly closing the session, we avoid leaving sockets open which
     51     # can trigger a ResourceWarning in some cases, and look like a memory leak

/usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    459         }
    460         send_kwargs.update(settings)
--> 461         resp = self.send(prep, **send_kwargs)
    462 
    463         return resp

/usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in send(self, request, **kwargs)
    571 
    572         # Send the request
--> 573         r = adapter.send(request, **kwargs)
    574 
    575         # Total elapsed time of the request (approximately)

/usr/local/lib/python2.7/dist-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    429         except (_SSLError, _HTTPError) as e:
    430             if isinstance(e, _SSLError):
--> 431                 raise SSLError(e, request=request)
    432             elif isinstance(e, ReadTimeoutError):
    433                 raise ReadTimeout(e, request=request)

SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

我在https://www.ssllabs.com上进行了扫描,结果如下:

SSL Report: reporo.com
Assessed on:  Sun Feb 22 21:42:57 PST 2015 | Clear cache Scan Another >>

    Server  Domain(s)   Test time   Grade
1   154.51.128.13 
Certificate not valid for domain name 
reporo.com
Sun Feb 22 21:40:53 PST 2015 
Duration: 9.167 sec -
2   198.12.15.168 
protected.ddosdefend.com 
Ready 
www.reporo.com

Sun Feb 22 21:41:02 PST 2015 
Duration: 115.189 sec   
F

问题答案:

www.reporo.com的证书本身(不是reporo.com)有效,但是缺少链证书,如ssllabs的报告所示:

Chain issues    Incomplete
....
2   Extra download  Thawte DV SSL CA 
Fingerprint: 3ca958f3e7d6837e1c1acf8b0f6a2e6d487d6762

要点是“未完成”和“额外下载”。一些浏览器将缓存缺少的链证书,其他浏览器将进行下载,而其他浏览器将失败。如果您尝试使用新的Firefox配置文件(该站点没有缓存任何证书)尝试该站点,它也会失败。

您可以下载缺少的链证书,并将其用作带有verify请求参数的受信任CA证书。不要只禁用验证,因为这样您就容易受到中间人攻击。

分步说明:

  • 从https://ssl-tools.net/certificates/vqgvhb-thawte-dv-ssl-ca下载丢失的证书(通过搜索SSLLabs报告中给出的指纹找到该证书)。以PEM格式下载文件,即https://ssl-tools.net/certificates/3ca958f3e7d6837e1c1acf8b0f6a2e6d487d6762.pem。
  • 从https://ssl-tools.net/certificates/91c6d6ee3e8ac86384e548c299295c756c817b81.pem下载根证书(也可通过搜索指纹找到)。
  • 将两个文件合并到一个新文件中chain.pem。确保每个文件都以有效的行尾字符结尾(不是下载的)。结果文件应如下所示。
  • 修改通话至
    requests.get('https://www.reporo.com/', verify = 'chain.pem')
    


 类似资料:
  • 问题内容: 我使用请求库从网站上获取了一些cookie,但是我只能从响应中获取cookie,如何从请求中获取cookie?谢谢! 问题答案: 或者,您可以在请求之前和之后使用和观察:

  • 问题内容: 我正在尝试教自己一些基本的网络抓取。使用Python的请求模块,在尝试以下操作之前,我能够抓取各种网站的html: 我得到的不是基本的html,而是本页面的内容: 我已经尝试过将get / post与我可以从文档,SO和其他示例中猜到的每种语法进行多种组合。我不明白上面看到的内容,无法将其转换为可以阅读的任何内容,也无法弄清楚如何获得自己真正想要的东西。我的问题是,如何获取以上页面的h

  • 在 Nginx 的典型应用场景中,几乎都是只读取 HTTP 头即可,例如负载均衡、正反向代理等场景。但是对于 API Server 或者 Web Application ,对 body 可以说就比较敏感了。由于 OpenResty 基于 Nginx ,所以天然的对请求 body 的读取细节与其他成熟 Web 框架有些不同。 最简单的 “Hello ****” 我们先来构造最简单的一个请求,POST

  • 说明 获取叫车请求id,没有id无法叫车 请求地址 /v1/order/Create/orderId 支持格式 {url}?k1=v1&k2=v2&k3=v3&... HTTP请求方式 Get 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的AppKey access_token s

  • 问题内容: 我想知道如何一次获取多个GET URL,然后将获取的JSON数据放入我的React DOM元素中。 这是我的代码: 但是,我想从服务器中获取其他JSON数据,然后使用传递到其中的所有这些JSON数据呈现我的ReactDOM。例如: 这可能吗?如果不是,将多个JSON数据提取到我的渲染ReactDOM元素中的其他解决方案是什么? 问题答案: 您可以在解决方案之前依靠Promises来执行

  • 问题内容: 我正在尝试解析使用Python Requests库完成的HEAD请求的结果,但似乎无法访问响应内容。 根据文档,我应该能够从request.Response.text访问内容。这对GET请求对我来说效果很好,但对HEAD请求返回None。 GET请求(有效) 内容= HEAD请求(无内容) 内容= 编辑 好的,我很快就从答案中意识到,HEAD请求不应返回仅内容标头。但这是否意味着,要访