Как я могу изменить строку пользовательского агента программно? - PullRequest
4 голосов
/ 12 июня 2009

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

Как я могу сделать это в Python?

Ответы [ 7 ]

8 голосов
/ 12 июня 2009

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

с использованием Pyll's 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 голосов
/ 12 июня 2009

В 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-запросов, конечно, имеют и другие способы указания заголовков.

2 голосов
/ 12 июня 2009

urllib2 хорошо, потому что он встроен, но я склонен использовать механизировать , когда у меня есть выбор. Он расширяет многие функциональные возможности urllib2 (хотя большая часть его была добавлена ​​в python в последние годы). В любом случае, если это то, что вы используете, вот пример из их документов о том, как бы вы изменили строку user-agent:

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")] 

Удачи.

2 голосов
/ 12 июня 2009

Используя 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>[…]
1 голос
/ 08 декабря 2013

Как уже упоминалось в ответах выше, поле user-agent в заголовке запроса http можно изменить с помощью встроенных в python модулей, таких как urllib2. В то же время важно проанализировать, что именно видит веб-сервер. В недавней публикации Обнаружение агента пользователя приведены пример кода и выходные данные, в которых дается описание того, что видит веб-сервер при отправке программного запроса.

0 голосов
/ 29 декабря 2011

Обновлено для 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()
0 голосов
/ 12 июня 2009

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

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

...