python,检测代理ip是否有效
测试环境
测试方法
第一种
- 使用requests模块。
- 使用requests.get() 发请求,根据其返回的网页内容进行判断,代理ip是否有效。
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,原因是该方法检测速度比较慢,主要耗时的是发请求这一过程。(可以使用)
第二种
import telnetlib
try:
telnetlib.Telnet(ip, port, timeout=3)
print("代理IP有效!")
except:
print("代理IP无效!")
- 缺点:虽然该方法可以比较快速的验证,但是经测试发现一些代理ip可以测试通过,但实际上代理ip仍然无效。(不推荐使用)
第三种
- 利用的http://icanhazip.com/返回的IP进行校验,如返回的是代理池的IP,说明代理有效,否则实际代理无效
def check_proxy(ip, port):
"""第二种:"""
try:
requests.adapters.DEFAULT_RETRIES = 3
proxy = f"http://{ip}:{port}"
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