代理与Python“请求”模块
简单的一个关于Python的优秀请求模块。
我似乎无法在文档中findvariables“代理”应包含的内容。 当我发送一个带有标准“IP:PORT”值的字典时,它拒绝了它要求2个值。 所以,我猜(因为这似乎没有在文档中涵盖),第一个值是IP和第二个端口?
文件只提到这一点:
代理 – (可选)字典映射协议到代理的URL。
所以我试了这个…我该怎么做?
proxy = { ip: port}
在把它们放入字典之前,我应该将它们转换成某种types吗?
r = requests.get(url,headers=headers,proxies=proxy)
proxies
的字典语法是{"protocol":"ip:port", ...}
。 有了它,您可以使用http , https和ftp协议为请求指定不同(或相同)的代理:
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_PROXY
, HTTPS_PROXY
和FTP_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()