如何以编程方式更改用户代理字符串?

时间:2009-06-12 15:15:56

标签: python user-agent

我想编写一个更改我的用户代理字符串的程序。

我怎样才能在Python中执行此操作?

7 个答案:

答案 0 :(得分:8)

我假设你是指HTTP请求中的用户代理字符串?这只是一个随您的请求一起发送的HTTP标头。

使用Python的urllib2:

import urllib2

url = 'http://foo.com/'

# add a header to define a custon User-Agent
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }

req = urllib2.Request(url, '', headers)
response = urllib2.urlopen(req).read()

答案 1 :(得分:3)

urllib中,它是这样完成的:

import urllib

class AppURLopener(urllib.FancyURLopener):
    version = "MyStrangeUserAgent"

urllib._urlopener = AppURLopener()

然后正常使用urllib.urlopen。在urllib2中,使用参数req = urllib2.Request(...)的{​​{1}}在您创建的新请求对象headers=somedict中设置所需的所有标头(包括用户代理),以及{ {1}}。

当然,发送HTTP请求的其他方式还有其他指定标头的方法。

答案 2 :(得分:2)

使用Python,您可以使用urllib下载网页并使用版本值更改用户代理。

http://wolfprojects.altervista.org/changeua.php

上有一个很好的例子

以下是从该页面复制的示例:

>>> from urllib import FancyURLopener

>>> class MyOpener(FancyURLopener):
...   version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11)
 Gecko/20071127 Firefox/2.0.0.11'
>>> myopener = MyOpener()
>>> page = myopener.open('http://www.google.com/search?q=python')
>>> page.read()
[…]Results <b>1</b> - <b>10</b> of about <b>81,800,000</b> for <b>python</b>[…]

答案 3 :(得分:2)

urllib2很好,因为它是内置的,但是当我有选择时,我倾向于使用mechanize。它扩展了很多urllib2的功能(尽管近年来已将其中大部分添加到python中)。无论如何,如果你正在使用它,这里是他们的文档中关于如何更改用户代理字符串的示例:

import mechanize
cookies = mechanize.CookieJar()
opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookies))
opener.addheaders = [("User-agent", "Mozilla/5.0 (compatible; MyProgram/0.1)"),
                     ("From", "responsible.person@example.com")] 

祝你好运。

答案 4 :(得分:1)

如上面的答案所述,可以使用python中的内置模块(如urllib2)更改http请求标头中的user-agent字段。同时,分析Web服务器的确切内容也很重要。最近一篇关于User agent detection的帖子提供了一个示例代码和输出,它描述了Web服务器在发送编程请求时所看到的内容。

答案 5 :(得分:0)

如果您想更改打开网页时发送的用户代理字符串,请浏览一下Firefox插件。 ;)例如,我找到了this one。或者您可以在Python中编写代理服务器,它可以独立于浏览器更改您的所有请求。

我的观点是,改变字符串将是最容易的部分;你的第一个问题应该是,我需要在哪里更改它?如果你已经知道(在浏览器?代理服务器?你和你正在点击的网络服务器之间的路由器上?),我们可能会更有帮助。或者,如果您只是在脚本中执行此操作,请使用任何urllib个答案。 ;)

答案 6 :(得分:0)

针对Python 3.2(py3k)进行了更新:

import urllib.request
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }
url = 'http://www.google.com'
request = urllib.request.Request(url, b'', headers)
response = urllib.request.urlopen(request).read()