本文共 2082 字,大约阅读时间需要 6 分钟。
201005 隶属于《01.数据抓取》小节
我们访问 等被封掉的网站时,需要设置 Proxy 。
下面是普通HTTP Proxy的设置方式:
_proxy_connect = "http://127.0.0.1:1984"
c = .Curl()
…
c.setopt(pycurl.PROXY, _proxy_connect)
req = urllib2.Request(link)
proxy = urllib2.ProxyHandler({'http':'http://127.0.0.1:1984'}) opener = urllib2.build_opener(proxy,urllib2.HTTPHandler) urllib2.install_opener(opener) req.add_header('User-Agent', URLLIB2_USER_AGENT) urllib2.urlopen(link)…
opener.close()
conn = httplib.HTTPConnection("127.0.0.1",1984)
conn.request("GET", "http://www.python.org/index.html") r = conn.getresponse() print r.status, r.reason
import httplib2import sockshttplib2.debuglevel=4h = httplib2.Http(proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, 'proxy_host', proxy_port))r,c = h.request(http://bitworking.org/news/)
参见 。
库需要安装,主页地址: ,它不需要安装,下载源代码包后直接把 socks.py 复制到 Python's lib/site-packages 目录即可。
则用 easy_install httplib2 安装即可。
更底层的socket代理如下所示:
import socks, socketsocks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "proxy_host", proxy_port)socket.socket = socks.socksocket需要 socks 库。
from twisted.internet import reactorfrom twisted.web import clientclass ProxyClientFactory(client.HTTPClientFactory): def setURL(self, url): client.HTTPClientFactory.setURL(self, url) self.path = urlfactory = ProxyClientFactory('http://url_you_want')reactor.connectTCP('http://proxy_host', proxy_port, factory)reactor.run()如果代理需要Basic身份验证,如代理地址是:http://user:pwd@host:port ,那么就用到proxy-authenticate header了:
import base64
# Proxy credentials proxyAuth = base64.encodestring('%s:%s' % (proxy_username,proxy_password)) proxy_authHeader = "Basic " + proxyAuth.strip() factory = ProxyClientFactory('http://url_you_want')factory.headers={'Proxy-Authenticate': proxy_authHeader}
reactor.connectTCP('http://proxy_host', proxy_port, factory)
只要把Proxy-Authenticate header字段设置好,前面的httplib/urllib2等如法炮制,可参考 中的 函数。
如果代理是HTTPS的,并需要证书,那么请参考 的写法。
Python 2.X可参考 的代码。或参见 中的 函数。
Python 3k的参见 。
转载地址:http://sczuo.baihongyu.com/