1

我有一个函数,通过使用Python3 中的请求库向几个网站发送请求来检查代理是否处于活动状态。我试图确定发出请求时哪个协议可用(http、https、socks),但不知道如何。

这是功能:

import requests

def is_prox(proxy_server):
    proxyDict = {"http": proxy_server,
                 "https": proxy_server,
                 "socks": proxy_server}

    test_site = {"http://www.google.com", "http://whatsmyip.org", "http://www.facebook.com"}
    headers = {'user-agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)'}

    for site in test_site:
        try:
            r = requests.get(site, headers=headers, proxies=proxyDict)
            status = r.status_code
            if status is 200:
                print(status)
            else:
                pass
        except Exception as e:
            print(str(e))


if __name__ == '__main__':
      is_prox("http://149.56.232.18:3128")

和输出:

$>python3 proxcheck.py
200

但我希望输出为:200 - http200 - https,或正在使用的任何协议。

我试过了requests.utils.getproxies()requests.utils.get_environ_proxies(url)但这不是我想要的。

我知道这是一本字典,但我不知道如何列出返回的字典元素200

谁能帮我吗?

4

1 回答 1

1

使用tmadam的建议,我能够产生我正在寻找的结果。我没有让请求遍历代理,而是设置了一个for循环来遍历字典并返回返回200的代理。

这是带有固定代码的更新函数:

import requests

def is_prox(proxy_server):
    proxyDict = {"http": proxy_server,
                 "https": proxy_server,
                 "socks": proxy_server}

    test_site = "http://api.ipify.org/?format=json"
    headers = {'user-agent': 'Mozilla/'
                             '5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/'
                             '20091102 Firefox/'
                             '3.5.5 (.NET CLR 3.5.30729)'}

    for proxy in proxyDict:
        try:
            r = requests.get(test_site, headers=headers, proxies=proxy)
            status = r.status_code
            if status is 200:
                print(str(status) + " - " + str(proxy.upper())
        except Exception as e:
            pass


if __name__ == '__main__':
      is_prox("http://149.56.232.18:3128")

返回:

200 - SOCKS
于 2017-07-21T01:41:42.487 回答