【问题标题】:Does Python requests really connect to http proxy?Python请求真的连接到http代理吗?
【发布时间】:2017-08-27 06:01:47
【问题描述】:

当我将下面的代码与明显错误的 http 代理一起使用时,requests 模块仍然可以从 url 获取。怎么可能?这是否意味着requests 不会使用http 代理?如果是这样,它是否有可能也不会使用 https 代理?我需要确认我的帖子和获取是通过代理完成的。

import requests
url=r'https://stackoverflow.com/questions'
proxies={'http':'http://asdasdasd:80'}


with requests.session() as s:
    resp = s.get(url, proxies=proxies)
    print resp
    print resp.text

【问题讨论】:

    标签: python proxy python-requests


    【解决方案1】:

    您正在设置 http 代理,但发出 https 请求。设置一个https 代理代替(或另外)。

    import requests
    
    proxies = {
      'http': 'http://10.10.1.10:3128',
      'https': 'http://10.10.1.10:1080',
    }
    
    requests.get('https://example.org', proxies=proxies)
    

    http://docs.python-requests.org/en/master/user/advanced/?highlight=proxies#proxies

    使用正确类型的代理集运行示例:

    >>> import requests
    >>> requests.get('https://example.org', proxies={'https': 'http://asdasdasd:80'})
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/dist-packages/requests/api.py", line 67, in get
        return request('get', url, params=params, **kwargs)
      File "/usr/lib/python2.7/dist-packages/requests/api.py", line 53, in request
        return session.request(method=method, url=url, **kwargs)
      File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 468, in request
        resp = self.send(prep, **send_kwargs)
      File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 576, in send
        r = adapter.send(request, **kwargs)
      File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 437, in send
        raise ConnectionError(e, request=request)
    requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.org', port=443):
    Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.',
    NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at
    0x7f3b880b9410>: Failed to establish a new connection: [Errno -2] Name or service not
    known',)))
    >>>
    

    【讨论】:

    • 谢谢琥珀。还有一个问题。因此,如果我在请求中指定一个实际的 http 代理作为名义上的 https 代理,那么一切都应该没问题,因为我们在 SSL 认证上少了一步。但在相反的情况下是真的吗?因为如果一个实际的 https 代理被指定为一个名义上的 http 代理,那么它将无法进行 SSL 认证。我说的对吗?
    猜你喜欢
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2020-06-07
    • 2011-09-29
    相关资源
    最近更新 更多