一、什么是代理?
代理(Proxy)是计算机网络中的一种应用服务,为了避免直接连接到目标服务器引发的一系列安全问题,通过代理服务器来进行请求和响应。代理服务器可以隐藏客户端真实IP地址,加密通信,减少访问延迟等。
在使用requests包发送HTTP请求时,使用代理可以实现一些特殊的功能,如访问被限制的网站,获取不同地区的搜索结果等。
二、requests包中设置代理
requests包中设置代理的方式非常简单,只需要在请求发送前设置proxies参数即可。具体的用法如下:
import requests proxies = { "http": "http://user:password@ip:port", "https": "http://user:password@ip:port" } response = requests.get(url, proxies=proxies)
其中,proxies为一个字典,代表http和https协议的代理,ip和port分别为代理服务器的ip地址和端口号,如果需要验证代理,user和password为代理服务器的用户名和密码。需要注意的是,这里使用http协议来连接代理服务器,并不是使用https。
另外,如果代理服务器不需要验证,可以简单地写成:
proxies = { "http": "http://ip:port", "https": "http://ip:port" }
三、使用HTTP代理
如果代理服务器只支持HTTP协议,可以如下设置:
proxies = { "http": "http://ip:port", }
这种情况下,如果要访问HTTPS网站,需要使用绕过验证的方式:
proxies = { "http": "http://ip:port", "https": "https://ip:port", } response = requests.get(url, proxies=proxies, verify=False)
其中,verify=False绕过SSL证书验证。
四、使用SOCKS代理
如果代理服务器支持SOCKS协议,可以使用SocksiPy库来实现代理,先用pip安装SocksiPy:
pip install SocksiPy
然后使用如下方式设置代理:
import socks import socket import requests # Set the socks proxy server socks.set_default_proxy(socks.SOCKS5, "ip", port) # Route the HTTP traffic through the SOCKS proxy server socket.socket = socks.socksocket response = requests.get(url)
五、如何使用特定的代理?
当我们需要在请求中使用不同的代理时,可以预先设置多个代理,并在请求时选择相应的代理。如下所示:
import requests proxies_1 = { "http": "http://ip_1:port", "https": "http://ip_1:port" } proxies_2 = { "http": "http://ip_2:port", "https": "http://ip_2:port" } response = requests.get(url, proxies=proxies_1) response = requests.get(url, proxies=proxies_2)
六、requests_cache缓存代理
使用requests_cache库可以在本地缓存HTTP响应,在网络不畅或者服务器响应缓慢时提高效率。如果我们在本地搭建了一个http缓存代理,可以将代理地址设置为requests_cache的backend参数,如下所示:
import requests_cache import requests requests_cache.install_cache('cache_proxy', backend='http', expire_after=None) response = requests.get(url)
七、总结
requests包使设置代理非常简单,只需要在请求发送前设置proxies参数即可。我们可以通过http代理服务器和socks代理服务器访问互联网,并且可以设置多个代理,实现访问不同地区的搜索结果。另外,使用requests_cache库可以在本地缓存HTTP响应,提高客户端效率。