2009-06-12 3 views
4

Я хотел бы написать программу, которая меняет строку моего пользовательского агента.Как я могу изменить строку пользовательского агента программно?

Как это сделать в Python?

+0

Если на ваш вопрос был дан ответ, вы хотели бы отметить один из ответов в качестве решения? – chossenger

ответ

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>[…] 
8

Я предполагаю, что вы имеете в виду строку агента пользователя в запросе HTTP? Это только HTTP-заголовок, который отправляется вместе с вашим запросом.

использованием 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() 
3

В urllib, это делается так:

import urllib 

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

urllib._urlopener = AppURLopener() 

, а затем просто использовать urllib.urlopen нормально. В urllib2 используйте req = urllib2.Request(...) с параметром headers=somedict, чтобы установить все нужные заголовки (включая пользовательский агент) в новый объект запроса req, который вы делаете, и urllib2.urlopen(req).

Другие способы отправки HTTP-запросов имеют другие способы указания заголовков, конечно.

0

Если вы хотите изменить строку пользовательского агента, которую вы отправляете при открытии веб-страниц, google для плагина Firefox. ;) Например, я нашел this one. Или вы можете написать прокси-сервер в Python, который изменяет все ваши запросы независимо от браузера.

Моя точка зрения заключается в том, что смена струны будет легкой частью; ваш первый вопрос должен быть, , где его нужно изменить? Если вы уже знаете, что (на прокси-сервере браузера? На маршрутизаторе между вами и веб-серверами вы бьетесь?), Мы, вероятно, можем быть более полезными. Или, если вы просто делаете это внутри скрипта, перейдите к любому из ответов urllib. ;)

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", "[email protected]")] 

удачи.

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() 
1

Как упоминалось в приведенных выше ответов, то поле агента пользователя в заголовке запроса HTTP может быть изменен с помощью встроенных модулей в Python, таких как urllib2. В то же время важно также проанализировать, что именно видит веб-сервер. Недавняя статья на User agent detection дает пример кода и вывод, который дает описание того, что веб-сервер видит при отправке программного запроса.

Смежные вопросы