使用Python检测代理IP的可用性
"pidancode.com" 和 "皮蛋编程" 都不是适合作为代理IP检测的字符串范例,因为它们不是IP地址。以下是使用Python检测代理IP可用性的详细过程:
- 获取代理IP列表
首先,需要获取代理IP列表。通常来说,可以在一些免费的代理网站上找到代理IP列表,比如"西刺代理"、"快代理"等。获取到列表后,需要将其存储到一个文件中,每行一个IP地址,格式如下:
127.0.0.1:8080 192.168.1.1:1080
- 测试代理IP可用性
接下来,需要编写Python程序,测试代理IP的可用性。具体过程如下:
- 读取代理IP列表,存储到一个列表中;
- 对于每个代理IP,分别使用HTTP和HTTPS协议进行测试;
- 测试HTTP协议时,先使用requests库发送一个GET请求,访问一个已知可用的网站,比如"http://www.baidu.com"。如果返回的状态码为200,则认为该代理IP可用;否则认为不可用;
- 测试HTTPS协议时,首先需要构造一个HTTPS请求,使用代理IP发送请求,然后验证返回的SSL证书。如果证书验证通过,则认为代理IP可用;否则认为不可用;
- 将可用的代理IP存储到另一个文件中。
代码示例如下:
import requests import urllib3 import socket # 设置超时时间 socket.setdefaulttimeout(3) # 禁用SSL证书验证警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 测试URL test_url = "http://www.baidu.com" test_url_https = "https://www.baidu.com" # 读取代理IP列表 with open("proxy_list.txt") as f: proxy_list = f.readlines() # 测试代理IP可用性 available_proxy_list = [] for proxy in proxy_list: proxy = proxy.strip() if not proxy: continue # 构造代理地址 proxies = { "http": f"http://{proxy}", "https": f"https://{proxy}" } # 测试HTTP协议 try: r = requests.get(test_url, proxies=proxies, timeout=3) if r.status_code == 200: available_proxy_list.append(proxy) print(f"{proxy} is available for HTTP") except: pass # 测试HTTPS协议 try: r = requests.get(test_url_https, proxies=proxies, timeout=3, verify=False) if r.status_code == 200: available_proxy_list.append(proxy) print(f"{proxy} is available for HTTPS") except: pass # 将可用的代理IP存储到文件中 with open("available_proxy_list.txt", "w") as f: f.write("\n".join(available_proxy_list))
这段代码首先读取代理IP列表,然后对列表中的每个IP进行测试。如果某个IP在HTTP和HTTPS协议下都可用,则将其存储到"available_proxy_list.txt"文件中。
相关文章