Sto usando urlretrieve dal modulo urllib.Urlretrieve e User-Agent? - Python
Non riesco a trovare come aggiungere una descrizione User-Agent alle mie richieste.
E 'possibile con urlretrieve? o devo usare un altro metodo?
Sto usando urlretrieve dal modulo urllib.Urlretrieve e User-Agent? - Python
Non riesco a trovare come aggiungere una descrizione User-Agent alle mie richieste.
E 'possibile con urlretrieve? o devo usare un altro metodo?
Non penso sia possibile con urlretrieve, almeno non facilmente. Proporrei di creare un oggetto urllib2.Request e passare le intestazioni richieste ad esso. Vedere
http://docs.python.org/library/urllib2.html#urllib2.urlopen
per gli esempi.
È possibile utilizzare le classi URLopener o FancyURLopener. L'argomento 'version' specifica l'agente utente dell'oggetto opener.
opener = FancyURLopener({})
opener.version = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.69 Safari/537.36'
opener.retrieve('http://example.com', 'index.html')
In primo luogo, impostare la versione:
urllib.URLopener.version = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0'
Poi:
filename, headers = urllib.urlretrieve(url)
So che questo problema fosse stato per 7 anni. E ho raggiunto questo problema cercando di capire come modificare il User-Agent
mentre si utilizza la funzione urlretrieve
.
Per chi ha raggiunto questo problema senza fortuna, ecco come ho fatto:
# proxy = ProxyHandler({'http': 'http://192.168.1.31:8888'})
proxy = ProxyHandler({})
opener = build_opener(proxy)
opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
install_opener(opener)
result = urlretrieve(url=file_url, filename=file_name)
La ragione per cui ho aggiunto delega è quello di monitorare il traffico di Charles, e qui è il traffico che ho ottenuto:
Considerare la correzione .version (è troppo piccolo di una modifica per me per farlo) – emartel