python中requests模块,支持设置代理来访问目标网站。
一、使用HTTP代理
import requests
headers = {
'user-agent': 'Mozilla/0.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36'
}
proxies = {
'http': 'http://172.28.9.46:10802',
'https': 'http://172.28.9.46:10802',
'https://www.getip.org': 'http://172.28.9.46:10802'
}
response = requests.get('https://www.getip.org', headers=headers ,proxies=proxies)
print(response.text)
这里需要注意的是:
如果只配置
'http': 'http://172.28.9.46:10802',
那么,只有访问http协议网站才会走代理,同理https也是如此。
如果只想访问某些个别网站时走代理,用如下写法
'https://www.getip.org': 'http://172.28.9.46:10802'
KV键值对中,K是访问的站点,V是代理服务器地址。
二、SOCKS5代理
除了基本的 HTTP 代理之外,Requests 还支持使用 SOCKS 协议的代理。
这是一项可选功能,需要在使用前安装其他第三方库,如下:
pip install requests[socks] -i https://mirrors.aliyun.com/pypi/simple
代码如下
import requests
headers = {
'user-agent': 'Mozilla/0.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36'
}
proxies = {
'http': 'socks5h://172.28.9.46:10801',
'https': 'socks5h://172.28.9.46:10801',
}
response = requests.get('https://www.getip.org', headers=headers ,proxies=proxies)
print(response.text)
三、DNS解析的问题
HTTP、HTTPS、SOCKS5H都是远程代理服务器来进行域名解析。
SOCKS5是本地进行域名解析,/etc/hosts文件会生效。
本地解析和远程解析有什么区别?
一般情况没有区别,但是遇到一些被墙的域名,使用本地解析无法访问,只能使用远程解析。
参考资料
https://requests.readthedocs.io/en/latest/user/advanced/#proxies