引言 代理(Proxy)是指在网络通信中充当中间人的服务器,它接收客户端发送的请求,然后向服务器发送请求,获取响应后再将响应返回给客户端。代理服务器通常用于隐藏客户端的真实IP地址,提高安全性、访问速度等方面的需求。
在进行爬虫时,由于一些网站会采取反爬虫机制,可能会限制同一IP地址的访问频率,因此需要使用代理来切换IP地址进行爬取。下面介绍几种代理使用方案及查看代理是否成功的方法。
过程 本文所有代理以 127.0.0.1:7890
为例
测试代理可用性/对部分请求使用代理 shell
中测试代理可用性1 2 3 4 $ curl http://icanhazip.com 59.49.101.211 $ curl http://icanhazip.com --proxy http://127.0.0.1:7890 37.19.221.152
python
中构建请求头使用代理1 2 3 4 5 6 7 8 9 10 11 import requestsURL = "http://icanhazip.com" proxies = {"http" : "http://127.0.0.1:7890" , "https" : "http://127.0.0.1:7890" } response = requests.get(URL, proxies=proxies) if response.status_code == 200 : print ("Your public IP address is:" , response.text.strip()) else : print ("Failed to retrieve public IP address." )
注意, requests
为第三方库, proxies
格式为 "http": "http://127.0.0.1:7890"
, 而 urllib2.Request
为 python
自带库.
1 2 3 4 5 6 7 8 9 import requestsproxy = '127.0.0.1:7890' proxy_values = "%(ip)s" % {'ip' : proxy} proxies = {"http" : proxy_values, "https" : proxy_values} proxies = {'http' : "socks5://127.0.0.1:7890" , 'https' : "socks5://127.0.0.1:7890" }
全局代理 MacOS/Linux Bash/zsh 1 export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
GNOME 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ## 代理查看 gsettings get org.gnome.system.proxy mode gsettings get org.gnome.system.proxy.http host gsettings get org.gnome.system.proxy.https port gsettings get org.gnome.system.proxy.socks host ## 代理设置 ### 无 gsettings set org.gnome.system.proxy mode 'none' ### 有 gsettings set org.gnome.system.proxy.http host 127.0.0.1 gsettings set org.gnome.system.proxy.socks port 7890 ## 查看 gsettings list-recursively gsettings list-recursively | grep proxy
python 设置环境变量使用HTTP代理 1 2 3 import osos.environ["http_proxy" ] = "http://127.0.0.1:1231" os.environ["https_proxy" ] = "http://127.0.0.1:1231"
通过tsocks使用SOCKS全局代理 通过设置环境变量的方式通常只能使用HTTP代理。要使用全局SOCKS代理可以使用tsocks.
安装tsocks后,编辑 /etc/tsocks.conf
,以使用端口为7890的本地SOCKS5代理为例:
1 2 3 server = 127.0.0.1 server_port = 7890 server_type = 5
配置完成后在原来的脚本执行命令前添加tsocks即可使用,例如:
1 tsocks python3 myscript.py
R 1 2 3 Sys.setenv( http_proxy= "http://127.0.0.1:7890" ) Sys.setenv( https_proxy= "http://127.0.0.1:7890" ) Sys.setenv( all_proxy= "socks5://127.0.0.1:7890" )
结论 题外话 一些好用的查看ip的网站:
国内 https://ip.cn
您的IP信息
域名解析地址:
59.49.101.211
所在地理位置:
中国 山西省 太原市 电信
http://www.cip.cc
http://myip.ipip.net
1 当前 IP:59.49.101.211 来自于:中国 山西 太原 电信
国外 http://icanhazip.com
https://ifconfig.me
引用
curl命令获取本机外网IP_curl ip_longzhizhui926的博客-CSDN博客
IP.cn - IP 地址查询 | 地理位置 | 手机归属地 | DNS查询
IP查询 - 查IP(www.cip.cc)
https://ifconfig.me
http://icanhazip.com
http://myip.ipip.net
在Python里使用代理的几种方式 - Lambda Infinite