urllib3使用指定的用户代理下载文件

时间:2014-12-09 01:26:07

标签: python urllib3

urllib3中更新用户代理信息的正确方法是什么?

如何检查用户代理信息是否确实已更改并正在使用?

例如:

user_agent = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0'}
http = urllib3.PoolManager(10, headers=user_agent)

r1 = http.request('GET', 'http://example.com/')
if r1.status is 200:
    with open('somefile','w+') as f:
        f.write(r1.data)

当我在PoolManager创建http时,我dir(http)查看了http.headers,看到apache默认为空并更新为指定的用户代理信息,但是它被使用了吗?无论如何都要检查而不必查看/var/log/apache2/access.log日志?

在尝试更新用户代理后实际检查>>> import urllib3 >>> user_agent = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0'} >>> http = urllib3.PoolManager(2, headers=user_agent) >>> r = http.request('GET','localhost') >>> with open('/var/log/apache2/access.log','r') as f: ... last_line = f.readlines()[-1] ... >>> last_line '127.0.0.1 - - [08/Dec/2014:20:42:04 -0500] "GET / HTTP/1.1" 200 461 "-" "-"\n'

{{1}}

1 个答案:

答案 0 :(得分:8)

header参数应为headers

http = urllib3.PoolManager(10, header=user_agent)

您可以使用httpbin.org等网站确认标题已正确设置:

>>> import urllib3
>>> user_agent = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) ..'}
>>> http = urllib3.PoolManager(10, headers=user_agent)
>>> r1 = http.urlopen('GET', 'http://httpbin.org/headers')
>>> print(r1.data)
{
  "headers": {
    "Accept-Encoding": "identity",
    "Connect-Time": "1",
    "Connection": "close",
    "Host": "httpbin.org",
    "Total-Route-Time": "0",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
    "Via": "1.1 vegur",
    "X-Request-Id": "5ef53f21-6caf-4e45-8123-98e417cd05ba"
  }
}

或者您可以使用数据包分析器(例如Wireshark)。