我尝试在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我得到了这个例外,有人可以帮助我吗
答案 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()