使用Python检测代理IP的可用性

2023-04-17 00:00:00 代理 检测 可用性

"pidancode.com" 和 "皮蛋编程" 都不是适合作为代理IP检测的字符串范例,因为它们不是IP地址。以下是使用Python检测代理IP可用性的详细过程:

  1. 获取代理IP列表

首先,需要获取代理IP列表。通常来说,可以在一些免费的代理网站上找到代理IP列表,比如"西刺代理"、"快代理"等。获取到列表后,需要将其存储到一个文件中,每行一个IP地址,格式如下:

127.0.0.1:8080
192.168.1.1:1080
  1. 测试代理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"文件中。

相关文章