2009-06-12 9 views

Répondre

2

En utilisant Python, vous pouvez utiliser urllib pour télécharger des pages Web et utiliser la valeur de version pour modifier l'agent utilisateur.

Il y a un très bon exemple sur http://wolfprojects.altervista.org/changeua.php

Voici un exemple copié à partir de cette page:

>>> 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

Je suppose que vous voulez dire une chaîne de l'agent utilisateur dans une requête HTTP? Ceci est juste un en-tête HTTP qui est envoyé avec votre demande.

à l'aide de urllib2 Python:

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

En urllib, il est fait comme ceci:

import urllib 

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

urllib._urlopener = AppURLopener() 

puis il suffit d'utiliser urllib.urlopen normalement. Dans urllib2, utilisez req = urllib2.Request(...) avec un paramètre de headers=somedict pour définir tous les en-têtes souhaités (y compris l'agent utilisateur) dans le nouvel objet de requête req que vous créez et urllib2.urlopen(req).

D'autres façons d'envoyer des requêtes HTTP ont évidemment d'autres façons de spécifier les en-têtes.

0

Si vous souhaitez modifier la chaîne d'agent utilisateur que vous envoyez lors de l'ouverture de pages Web, recherchez un plugin Firefox dans google. ;) Par exemple, j'ai trouvé this one. Ou vous pouvez écrire un serveur proxy en Python, qui change toutes vos demandes indépendamment du navigateur. Mon point est, changer la chaîne va être la partie facile; votre première question devrait être, où dois-je le changer? Si vous savez déjà que (au niveau du navigateur "serveur proxy" sur le routeur entre vous et les serveurs Web que vous frappez?), Nous pouvons probablement être plus utiles. Ou, si vous ne faites que cela dans un script, allez avec l'une des réponses urllib. ;)

2

urllib2 est agréable parce qu'il est intégré, mais j'ai tendance à utiliser mechanize quand j'ai le choix. Il étend beaucoup de fonctionnalités de urllib2 (même si une grande partie a été ajoutée à Python ces dernières années). Quoi qu'il en soit, si c'est ce que vous utilisez, voici un exemple de leurs documents sur la façon dont vous souhaitez modifier la chaîne de l'agent utilisateur:

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

Bonne chance.

0

mis à jour pour 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

Comme mentionné dans les réponses ci-dessus, le champ de l'agent utilisateur dans l'en-tête de la demande HTTP peut être modifié à l'aide de modules prédéfinies en python comme urllib2. Dans le même temps, il est également important d'analyser ce que le serveur Web voit exactement. Une publication récente sur User agent detection donne un exemple de code et de sortie, qui donne une description de ce que le serveur Web voit lorsqu'une demande par programme est envoyée.