gpt4 book ai didi

python - 使任何访问互联网的 python 代码工作(代理 + 自定义 .crt)

转载 作者:行者123 更新时间:2023-12-03 22:37:17 25 4
gpt4 key购买 nike

情况

如果未完成以下操作,则使用 python 发出的所有传出 HTTP 或 HTTPS 请求都会以 WinError 10054 连接重置或 SSL 握手错误结束。

  1. 设置 HTTP_PROXY、HTTPS_PROXY 环境变量或它们的对应变量
  2. 需要验证的内容必须使用自定义 .crt 文件进行验证。

例如,假设 .crt 文件就位,两者都会给我一个 200 OK:

import os
os.environ['HTTP_PROXY'] = #some_appropriate_address
os.environ['HTTPS_PROXY'] = #some appropriate_address
requests.get('http://www.google.com',verify="C:\the_file.crt") # 200 OK
requests.get('http://httpbin.org',verify=False) # 200 OK, but unsafe
requests.get('http://httpbin.org') # SSL bad handshake error

问题

我有大量困惑的预写代码(大量使用 urllib3 和请求以及可能的其他互联网访问代码),我必须使其在上述条件下工作。

当然,我可以为每个 requests.get() 编写 verify='C:\the_file.crt',但这很快就会变得棘手,对吧?并且代码也可能正在使用其他一些库(不是请求)。所以我正在寻找一个全局设置(环境变量等)我应该改变,以便一切正常(在向服务器发出 GET 请求时返回 200 OK,无论代码是否已编写在请求-py)。

另外,如果没有这样的方法,我想解释一下为什么。

我试过(正在尝试)

也许编辑 .condarc 文件(通过 conda --config)是一种解决方案。我试过了,但无济于事:python 给我一个“SSL 验证失败”错误。相反,请注意上面的代码片段给了我一个 200 OK。据我所知,这不太适合之前在 Stack Overflow 中讨论过的许多情况。

顺便说一下,将 ssl_verify 设置为 false 也不能解决问题;由于某种原因,我仍然收到错误的握手错误。

我使用的是 Win 10、Python 3.7.4 (Anaconda)。

更新

我已经编辑了这个问题,以防止将来对该问题的内容产生误解。下面的一些答案是对此处所写内容的重申。

目前的答案也不完全令人满意,因为它们似乎只解决了我使用 requestsurllib3 的情况。

最佳答案

通过在 Windows 中设置以下环境变量,您应该能够获得任何使用请求模块(位于 urllib3 内)的 python 代码在代理后面工作,而无需修改 python 代码本身。

http_proxy           http://[<user>:<pwd>@]<http_host>:<http_port>  
https_proxy http://[<user>:<pwd>@]<https_host>:<https_port>
requests_ca_bundle <path_to_ca_bundle.crt>
curl_ca_bundle <path_to_ca_bundle.crt>

您可以通过执行以下操作来设置环境变量:

  • 按 Windows 键 + R,输入 sysdm.cpl ,3(注意逗号前的空格)并按 Enter
  • 点击环境变量按钮
  • 在任一字段(用户变量或系统变量)中,添加四个变量

关于python - 使任何访问互联网的 python 代码工作(代理 + 自定义 .crt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59678155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com