代理可用性测试及使用

引言

代理(Proxy)是指在网络通信中充当中间人的服务器,它接收客户端发送的请求,然后向服务器发送请求,获取响应后再将响应返回给客户端。代理服务器通常用于隐藏客户端的真实IP地址,提高安全性、访问速度等方面的需求。

在进行爬虫时,由于一些网站会采取反爬虫机制,可能会限制同一IP地址的访问频率,因此需要使用代理来切换IP地址进行爬取。下面介绍几种代理使用方案及查看代理是否成功的方法。

过程

本文所有代理以127.0.0.1:7890为例

测试代理可用性/对部分请求使用代理

shell 中测试代理可用性

代码语言:shell
复制
$ curl http://icanhazip.com
59.49.101.211
$ curl http://icanhazip.com --proxy http://127.0.0.1:7890 
37.19.221.152

python 中构建请求头使用代理

代码语言:python
代码运行次数:0
复制
Cloud Studio 代码运行
import requests

URL = "http://icanhazip.com"
proxies = {"http": "http://127.0.0.1", "https": "http://127.0.0.1"}

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", 而urllib2.Requestpython自带库.

代码语言:python
代码运行次数:0
复制
Cloud Studio 代码运行
import requests

可选代理IP构建方式

proxy = '127.0.0.1:7890'
proxy_values = "%(ip)s" % {'ip': proxy}
proxies = {"http": proxy_values, "https": proxy_values}

也可以使用socks5代理

proxies = {'http': "socks5://127.0.0.1",
'https': "socks5://127.0.0.1"}

全局代理

MacOS/Linux Bash/zsh

代码语言:shell
复制
export https_proxy=http://127.0.0.1 http_proxy=http://127.0.0.1 all_proxy=socks5://127.0.0.1

GNOME

代码语言:shell
复制
# 代理查看
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代理
代码语言:python
代码运行次数:0
复制
Cloud Studio 代码运行
import os
os.environ["http_proxy"] = "http://127.0.0.1"
os.environ["https_proxy"] = "http://127.0.0.1"
通过tsocks使用SOCKS全局代理

通过设置环境变量的方式通常只能使用HTTP代理。要使用全局SOCKS代理可以使用tsocks.

安装tsocks后,编辑/etc/tsocks.conf,以使用端口为7890的本地SOCKS5代理为例:

代码语言:txt
复制
server = 127.0.0.1
server_port = 7890
server_type = 5

配置完成后在原来的脚本执行命令前添加tsocks即可使用,例如:

代码语言:txt
复制
tsocks python3 myscript.py

R

代码语言:text
复制
Sys.setenv(http_proxy="http://127.0.0.1")
Sys.setenv(https_proxy="http://127.0.0.1")
Sys.setenv(all_proxy="socks5://127.0.0.1")

结论

题外话

一些好用的查看ip的网站:

国内

https://ip.cn

您的IP信息

域名解析地址:

59.49.101.211

所在地理位置:

中国 山西省 太原市 电信

http://www.cip.cc

http://myip.ipip.net

代码语言:txt
复制
当前 IP:59.49.101.211  来自于:中国 山西 太原  电信

国外

http://icanhazip.com

代码语言:txt
复制
37.19.221.152

https://ifconfig.me

引用

  1. curl命令获取本机外网IP_curl ip_longzhizhui926的博客-CSDN博客
  2. IP.cn - IP 地址查询 | 地理位置 | 手机归属地  | DNS查询
  3. IP查询 - 查IP(www.cip.cc)
  4. https://ifconfig.me
  5. http://icanhazip.com
  6. http://myip.ipip.net
  7. 在Python里使用代理的几种方式 - Lambda Infinite