python,检测代理ip是否有效
测试环境
- python3.6 、window10系统
测试方法
第一种
- 使用requests模块。
- 使用requests.get() 发请求,根据其返回的网页内容进行判断,代理ip是否有效。
python
import requests
proxies = {'http': '120.236.128.201:8060',
'https': '120.236.128.201:8060'
}
url = "http://www.baidu.com/"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
try:
response = requests.get(url, headers=headers, proxies=proxies, timeout=5)
print(response.text)
except Exception as e:
print(f"请求失败,代理IP无效!{e}")
else:
print("请求成功,代理IP有效!")
- 缺点:虽然可以检测代理ip是否有效,但是该方法只能用于检测少量的代理ip,原因是该方法检测速度比较慢,主要耗时的是发请求这一过程。(可以使用)
第二种
- telnet 方法。
python
import telnetlib
try:
telnetlib.Telnet(ip, port, timeout=3)
print("代理IP有效!")
except:
print("代理IP无效!")
- 缺点:虽然该方法可以比较快速的验证,但是经测试发现一些代理ip可以测试通过,但实际上代理ip仍然无效。(不推荐使用)
第三种
- 利用的http://icanhazip.com/返回的IP进行校验,如返回的是代理池的IP,说明代理有效,否则实际代理无效
python
def check_proxy(ip, port):
"""第二种:"""
try:
# 设置重连次数
requests.adapters.DEFAULT_RETRIES = 3
# IP = random.choice(IPAgents)
proxy = f"http://{ip}:{port}"
# thisIP = "".join(IP.split(":")[0:1])
# print(thisIP)
res = requests.get(url="http://icanhazip.com/", timeout=2, proxies={"http": proxy})
proxyIP = res.text
if (proxyIP == proxy):
print("代理IP:'" + proxyIP + "'有效!")
return True
else:
print("2代理IP无效!")
return False
except:
print("1代理IP无效!")
return False
- 推荐使用。
httpbin.org 这个网站能测试 HTTP 请求和响应的各种信息,比如 cookie、ip、headers 和登录验证等,且支持 GET、POST 等多种方法,对 web 开发和测试很有帮助。
它用 Python + Flask 编写,是一个开源项目。
官方网站
开源地址
今天使用的是它的ip检测功能,能够返回本机ip
ip检测
python
import requests,sys
ip_port = '222.74.202.233:80'
#ip_port为空时只返回本机ip,为代理ip时返回本机ip和代理ip
proxies = {
'http': ip_port,
'https': ip_port
}
#ip检测网址
url="http://httpbin.org/ip"
header={'User-Agent':'Mozilla/5.0'}
if not ip_port:
print('ip_port不能为空')
sys.exit(0)
try:
response=requests.get(url,headers=header,proxies=proxies,timeout=5)
print(response)
html = response.text
print(html)
except :
print("超时")