正在使用Python请求验证代理

时间:2016-11-11 18:59:54

标签: python python-requests

我正在尝试使用python请求库的代理功能,但是通过代理发出的请求返回的数据不正确(页面文本在应该是本地化语言时仍然是英文)。有没有办法验证代理是否正确使用?

agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/XX.X.XXXX.XX Safari/537.36"

proxy_list = {
'South Korea' : 'http://1.241.102.9:3128',
'Sweden' : 'http://79.136.65.150:80',
'Russia' : 'http://77.236.87.175:80',
'Japan' : 'http://153.149.158.149:3128',
'Germany' : 'http://213.136.89.121:80',
}

# Check app availability via each proxy
for proxy_country, proxy_val in proxy_list.items():
    proxyDict = {"http" : proxy_val}
    try:
        req = requests.get(url, headers={'user-agent':agent}, proxies=proxyDict,timeout=5)
    except:
        print "COULD NOT DETERMINE AVAILABILITY FOR: %s" % (proxy_country)
    else:
        print "%s : %s" % (proxy_country,req.status_code)

1 个答案:

答案 0 :(得分:1)

验证requests是否正在使用代理的最简单方法是启用调试日志记录。 requests模块以DEBUG优先级记录各种有趣的内容,所以只需执行:

import logging
logging.basicConfig(level='DEBUG')

这是我的简单测试脚本:

#!/usr/bin/env python

import sys
import logging
import requests

logging.basicConfig(level='DEBUG')
res = requests.get(sys.argv[1])
res.raise_for_status()

如果我这样做:

$ python reqtest.py http://lwn.net/

我明白了:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): lwn.net
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 200 9098

但是如果我启用代理:

$ http_proxy=http://squid.corp.example.com:3128 pytyhon reqtest.py http://lwn.net/

我清楚地看到requests正在连接到代理,而不是直接连接到远程系统:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): squid.corp.example.com
DEBUG:requests.packages.urllib3.connectionpool:"GET http://lwn.net/ HTTP/1.1" 200 9098

如果我像这样修改代码,我会看到相同的行为:

#!/usr/bin/env python

import sys
import logging
import requests

logging.basicConfig(level='DEBUG')
res = requests.get(sys.argv[1],
                   proxies=dict(http='http://squid.corp.example.com:3128'))
res.raise_for_status()