作者这里由于爬虫业务需要,所以向云立方购买了几台adsl拨号代理搭建自己的代理服气器,云立方地址:
https://www.yunlifang.cn/
具体搭建步骤如下:
环境准备:
购买 adsl 拨号服务器:centos7.x版本以上 如下图所示:
步骤1:安装squid
yum install -y openssl squid
步骤2:配置 squid 用户名密码验证(由于云立方要求必须要做用户认证才能正常使用,所以这里需要生成密码和用户进行配置)
yum install httpd
然后执行如下命令进行生成 用户名和密码,这里的示例为生成一个账号:taimei
htpasswd -c /etc/squid/passwd taimei
执行命令后将会出现如下图所示,直接输入两次密码即可,建议密码英文加数字组合:
步骤3:修改配置文件,squid 的配置文件默认在 /etc/squid 下,作者这里关于 squid.conf 的配置如下,可直接复制覆盖掉你的配置文件:
acl localnet src 0.0.0.0/0 # all network
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_port 65000
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
via off
forwarded_for delete
forwarded_for off
request_header_access From deny all
request_header_access Server deny all
request_header_access WWW-Authenticate deny all
request_header_access Link deny all
request_header_access Cache-Control deny all
request_header_access Proxy-Connection deny all
request_header_access X-Cache deny all
request_header_access X-Cache-Lookup deny all
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
request_header_access Pragma deny all
request_header_access Keep-Alive deny all
# 关闭squid的缓存功能
acl NCACHE method GET
no_cache deny NCACHE
#-----------------------用户认证--------------------
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
acl taimei proxy_auth REQUIRED
http_access allow taimei
这里需要注意一点的是:云立方开放给 squid 外部可用的端口是65000和65001,所以我这里将 http_port 参数设置成了 65000
步骤4:修改完配置文件之后保存,然后输入以下命令进行初始化 squid
squid -z
如果出现类似下图中的任务则代表初始化成功:
步骤5:启动squid 输入以下命令:
squid 或者service squid restart 重启
查看是否启动成功:
netstat -ntap | grep squid
如果启动成功,会出现如下图所示内容,表示正在监听 65000 端口(如果未出现,则表示没启动成功,这里建议可以将服务器重启,执行 reboot 重启完成之后再重新拨号和启动squid试试):
步骤 6:查看拨号后的代理ip,执行如下命令:
ifconfig
可以看到这里我拨号得到的 ip是:125.78.218.126 如果这里是显示的是127开始表示未拨号,需要先执行 adsl-start命令:
步骤7:编写python代码进行测试,我这里写了一段代码可以直接拷贝过去用:
import time
import requests
import random
import re
'''从百度获取代理ip信息'''
def get_ip_info(proxie_ip:str) -> dict:
try:
start = time.clock()
proxies={'http':proxie_ip}
url="http://www.baidu.com/s?ie=utf-87&wd=ip"
res=requests.get(url,proxies=proxies,timeout=15)
p='\s+本机IP: ([\s\S+]*?)([\s\S+]*?)\s+ '
ip_info=re.findall(p,res.text)
end = time.clock()
return {"ip":proxie_ip,"address":ip_info[0][1],"res_time":str(round(end-start,2))+"秒"} if ip_info else None
except Exception as ex:
print("-----Error in obtaining proxy IP information from Baidu--------")
print(ex)
pass
print((get_ip_info("http://taimei:[email protected]:65000")))
执行将会返回代理ip的地址等信息:
这里需要注意的是,在使用代代理ip的时候,需要在前面加上用户名和密码和@符号,例如这里的 taimei:taimei_0603@