您的位置:

使用requests包设置代理

一、什么是代理?

代理(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响应,提高客户端效率。