Je voudrais écrire un programme qui change ma chaîne d'agent utilisateur.Comment puis-je modifier une chaîne d'agent utilisateur par programme?
Comment puis-je faire cela en Python?
Je voudrais écrire un programme qui change ma chaîne d'agent utilisateur.Comment puis-je modifier une chaîne d'agent utilisateur par programme?
Comment puis-je faire cela en Python?
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>[…]
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()
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.
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
. ;)
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.
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()
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.
Si vous avez répondu à votre question, aimeriez-vous que l'une des réponses soit une solution? – chossenger