Python请求不适用于https代理

时间:2017-07-18 12:06:33

标签: python https proxy python-requests

我尝试在python中使用https代理:

proxiesDict ={
  'http':  'http://' + proxy_line,
  'https': 'https://' + proxy_line
}


response = requests.get('https://api.ipify.org/?format=json', proxies=proxiesDict, allow_redirects=False)

proxy_line是以ip:port格式从文件读取的代理。我在浏览器中检查了这个https代理,它确实有效。但在python中,这段代码会挂起几秒钟,然后我会遇到异常:

HTTPSConnectionPool(host='api.ipify.org', port=443): Max retries exceeded with url: /?format=json (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x0425E450>: Failed to establish a new connection: [WinError 10060] 

我尝试使用socks5代理,它适用于安装了PySocks的socks5代理。但是对于https我得到了这个例外,有人可以帮助我吗

3 个答案:

答案 0 :(得分:3)

requests指定代理列表时,密钥是协议,值为domain / ip。您无需再次指定http://https://作为实际值。

因此,您的proxiesDict将是:

proxiesDict = {
  'http':  proxy_line,
  'https': proxy_line
}

答案 1 :(得分:0)

您还可以通过设置环境变量来配置代理:

{{1}}

然后,您只需执行没有代理请求的python脚本。

此外,您可以使用http://user:password@host

配置代理

有关详细信息,请参阅此文档:http://docs.python-requests.org/en/master/user/advanced/

答案 2 :(得分:0)

尝试使用pycurl这个功能可能会有所帮助:

import pycurl

def pycurl_downloader(url, proxy_url, proxy_usr):
    """
    Download files with pycurl
    the proxy configuration:
    proxy_url = 'http://10.0.0.0:3128'
    proxy_usr = 'user:password'
    """

    c = pycurl.Curl()
    c.setopt(pycurl.FOLLOWLOCATION, 1)
    c.setopt(pycurl.MAXREDIRS, 5)
    c.setopt(pycurl.CONNECTTIMEOUT, 30)
    c.setopt(pycurl.AUTOREFERER, 1)

    if proxy: c.setopt(pycurl.PROXY, proxy_url)
    if proxy_usr: c.setopt(pycurl.PROXYUSERPWD, proxy_usr)

    content = StringIO()
    c.setopt(pycurl.URL, url)
    c.setopt(c.WRITEFUNCTION, conten.write)

    try:
        c.perform()
        c.close()
    except pycurl.error, error:
        errno, errstr = error
        print 'An error occurred: ', errstr

    return content.getvalue()