代理与Python“请求”模块

简单的一个关于Python的优秀请求模块。

我似乎无法在文档中findvariables“代理”应包含的内容。 当我发送一个带有标准“IP:PORT”值的字典时,它拒绝了它要求2个值。 所以,我猜(因为这似乎没有在文档中涵盖),第一个值是IP和第二个端口?

文件只提到这一点:

代理 – (可选)字典映射协议到代理的URL。

所以我试了这个…我该怎么做?

proxy = { ip: port} 

在把它们放入字典之前,我应该将它们转换成某种types吗?

 r = requests.get(url,headers=headers,proxies=proxy) 

proxies的字典语法是{"protocol":"ip:port", ...} 。 有了它,您可以使用httphttpsftp协议为请求指定不同(或相同)的代理:

 http_proxy = "http://10.10.1.10:3128" https_proxy = "https://10.10.1.11:1080" ftp_proxy = "ftp://10.10.1.10:3128" proxyDict = { "http" : http_proxy, "https" : https_proxy, "ftp" : ftp_proxy } r = requests.get(url, headers=headers, proxies=proxyDict) 

requests文档中推导出来:

参数:
method – 新的Request对象的方法。
url – 新的Request对象的URL。

proxies – (可选)字典映射 协议代理URL


在linux上,你也可以通过HTTP_PROXYHTTPS_PROXYFTP_PROXY环境variables来实现:

 export HTTP_PROXY=10.10.1.10:3128 export HTTPS_PROXY=10.10.1.11:1080 export FTP_PROXY=10.10.1.10:3128 

在Windows上:

 set http_proxy=10.10.1.10:3128 set https_proxy=10.10.1.11:1080 set ftp_proxy=10.10.1.10:3128 

谢谢,杰伊指出了这一点:
语法随请求2.0.0更改。
您需要将模式添加到url: http : //docs.python-requests.org/en/latest/user/advanced/#proxies

我发现urllib有一些非常好的代码来获取系统的代理设置,它们恰好是以正确的forms直接使用的。 你可以使用这个:

 import urllib ... r = requests.get('http://example.org', proxies=urllib.getproxies()) 

它工作得很好,urllib知道获得Mac OS X和Windows设置。

接受的答案对我来说是一个好的开始,但是我不断收到以下错误:

 AssertionError: Not supported proxy scheme None 

解决这个问题就是在代理url中指定http://:

 http_proxy = "http://194.62.145.248:8080" https_proxy = "https://194.62.145.248:8080" ftp_proxy = "10.10.1.10:3128" proxyDict = { "http" : http_proxy, "https" : https_proxy, "ftp" : ftp_proxy } 

我有兴趣知道为什么一些人的原创作品,但不是我。

编辑:我看到主要答案现在更新,以反映这:)

你可以参考这里的代理文档 。

如果您需要使用代理,则可以使用任何请求方法的代理参数来configuration各个请求:

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

要在您的代理上使用HTTP基本身份validation,请使用http:// user:password@host.com/语法:

 proxies = { "http": "http://user:pass@10.10.1.10:3128/" } 

这里是我的基本类在Python的请求模块与一些代理configuration和秒表!

 import requests import time class BaseCheck(): def __init__(self, url): self.http_proxy = "http://user:pw@proxy:8080" self.https_proxy = "http://user:pw@proxy:8080" self.ftp_proxy = "http://user:pw@proxy:8080" self.proxyDict = { "http" : self.http_proxy, "https" : self.https_proxy, "ftp" : self.ftp_proxy } self.url = url def makearr(tsteps): global stemps global steps stemps = {} for step in tsteps: stemps[step] = { 'start': 0, 'end': 0 } steps = tsteps makearr(['init','check']) def starttime(typ = ""): for stemp in stemps: if typ == "": stemps[stemp]['start'] = time.time() else: stemps[stemp][typ] = time.time() starttime() def __str__(self): return str(self.url) def getrequests(self): g=requests.get(self.url,proxies=self.proxyDict) print g.status_code print g.content print self.url stemps['init']['end'] = time.time() #print stemps['init']['end'] - stemps['init']['start'] x= stemps['init']['end'] - stemps['init']['start'] print x test=BaseCheck(url='http://google.com') test.getrequests()