Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使任何internet访问python代码正常工作(proxy+;custom.crt) 形势_Python_Http Proxy - Fatal编程技术网

使任何internet访问python代码正常工作(proxy+;custom.crt) 形势

使任何internet访问python代码正常工作(proxy+;custom.crt) 形势,python,http-proxy,Python,Http Proxy,如果未执行以下操作,则使用python发出的所有传出HTTP或HTTPS请求将以WinError 10054连接重置或SSL错误握手结束 设置HTTP\U PROXY、HTTPS\U PROXY环境变量或它们的对应项 需要验证的内容必须使用自定义的.crt文件进行验证 例如,假设.crt文件已就位,两者都会给我一个200ok: import os os.environ['HTTP_PROXY'] = #some_appropriate_address os.environ['HTTPS_PROX

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

  • 设置HTTP\U PROXY、HTTPS\U PROXY环境变量或它们的对应项
  • 需要验证的内容必须使用自定义的.crt文件进行验证
  • 例如,假设.crt文件已就位,两者都会给我一个
    200ok

    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和请求以及可能的其他internet访问代码),我必须使其在上述条件下工作

    当然,我可以为每个
    请求编写
    verify='C:\u file.crt'
    。get()
    ,但这很快就会让人毛骨悚然,对吗?代码也可能正在使用其他库(不是请求)。因此,我正在寻找一个应该更改的全局设置(环境变量等),以便一切都能正常工作(在向服务器发出GET请求时返回200 OK,无论代码是否以请求的形式编写)

    此外,如果没有这种办法,我想解释一下原因

    我所尝试的(正在尝试的) 也许编辑.condarc文件(通过
    conda--config
    )是一种解决方案。我尝试了,但没有成功:python给了我一个“SSL验证失败”错误。相反,请注意上面的代码片段给了我一个
    200ok
    。据我所知,这与之前在堆栈溢出中讨论的许多情况不太相符

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

    我使用的是Win10,Python 3.7.4(Anaconda)

    更新 我对问题进行了编辑,以防止将来对该问题的内容产生误解。下面的几个答案是从一开始就在这里写的东西的重复


    当前的答案也不完全令人满意,因为它们似乎只解决了我正在使用
    请求
    urllib3
    的情况,根据Doc in requests:

    您可以通过以下方式使用代理:

    proxies={'http':'http://10.10.1.10:3128','https':'http://10.10.1.10:1080',}
    请求。获取('http://example.org,代理=代理)
    

    然后取决于您是否要添加
    .crt
    .pem

    requests.get('https://kennethreitz.com,cert=('/path/server.crt','/path/key'))
    

    requests.get('https://kennethreitz.org,cert='/path/client.pem')


    您正试图向外部url发出https请求,需要提供适当的证书文件进行验证。您正试图在每个组件内进行这些配置。但我建议您在全球和系统范围内进行这些配置,这样两个组件都不需要提供证书和处理ssl验证内容


    我对与windows相关的网络配置很差,但我建议您去检查一下,我很确定您可以使用正确的证书配置ssl代理。

    您应该能够获得使用请求模块(位于urllib3内)的任何python代码通过在Windows中设置以下环境变量,在不修改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>
    
    http\u代理http://[:@]:
    https_代理http://[:@]:
    请求\u ca\u包
    卷曲束
    
    可以通过执行以下操作设置环境变量:

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

    您的环境变量是否不能满足您的要求?请尝试使用小写字母
    https\u proxy
    。@tripleee-nope,仍然会给我一个SSL错误握手错误。curl命令在命令行上有效吗?@wishmaster curl:(35)schannel:接收握手失败,SSL/TLS连接失败假定您可以ping网站,尝试
    请求。获取('http://httpbin.org,verify=False)
    并在问题中发布错误谢谢您的回答!然而,我的问题的措辞可能会引起一些误解。我将在接下来的24小时内编辑我的问题,以确保不再发生此类误解。当我这样做时,我将删除/重新发布或编辑此评论,以便通知您。对于给您带来的不便,我深表歉意。对于延误,我深表歉意-修复了问题;请看一看。你的回答部分重复了这个问题,100%不是我想要的;我在上一版本中已经说过,我需要一个全局设置。为了避免进一步的误解,我缩短了问题的篇幅,同时保留了所有的核心内容。一旦我在周一开始工作,这项工作奏效,我将立即交出奖金。非常感谢你!只是补充一下,其他一些工具可能有不同的配置。例如,如果使用TensorFlow数据集:tf.data.Dataset,则需要设置其他环境变量:export-TFDS\u-CA\u BUNDLE=path/CA\u-certs,export-TFDS\u-HTTPS\u-PROXY=“”,export-TFDS\u-HTTP\u-PROXY=“”使用代理并不容易。我从去年开始在一家使用代理的公司做ML,我可能几乎每天都对代理有意见。祝你好运