Attualmente sto tentando di accedere a un sito utilizzando Python, tuttavia il sito sembra inviare un cookie e un'istruzione di reindirizzamento sulla stessa pagina. Python sembra seguire questo reindirizzamento impedendomi così di leggere il cookie inviato dalla pagina di accesso. Come posso evitare che urllib (o urllib2) di urlopen di Python segua il reindirizzamento?Come impedire a Python di urllib (2) di seguire un reindirizzamento
risposta
Si potrebbe fare un paio di cose:
- Costruisci il tuo HTTPRedirectHandler che intercetta ogni reindirizzare
- Creare un'istanza HTTPCookieProcessor ed installare che apri in modo da avere accesso al Cookiejar.
Questa è una cosa veloce poco che mostra sia
import urllib2
#redirect_handler = urllib2.HTTPRedirectHandler()
class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_302(self, req, fp, code, msg, headers):
print "Cookie Manip Right Here"
return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)
http_error_301 = http_error_303 = http_error_307 = http_error_302
cookieprocessor = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(MyHTTPRedirectHandler, cookieprocessor)
urllib2.install_opener(opener)
response =urllib2.urlopen("WHEREEVER")
print response.read()
print cookieprocessor.cookiejar
Sembra che tu non stia usando' redirect_handler = urllib2.HTTPRedirectHandler() 'nell'esempio. Volevi mostrare un secondo esempio? –
Sei corretto, non sto usando redirect_handler. Invece, ho creato il mio gestore di reindirizzamento. Modificherò per rimuovere. – pope
Perché non è necessario istanziare il 'MyHTTPRedirectHandler', ma piuttosto passare la classe nel metodo' build_opener() '? – Benjamin
urllib2.urlopen
chiamate build_opener()
che utilizza questo elenco di classi handler:
handlers = [ProxyHandler, UnknownHandler, HTTPHandler,
HTTPDefaultErrorHandler, HTTPRedirectHandler,
FTPHandler, FileHandler, HTTPErrorProcessor]
Si potrebbe provare a chiamare urllib2.build_opener(handlers)
te stesso con una lista che omette HTTPRedirectHandler
, quindi chiamare il metodo open()
sul risultato di aprire l'URL. Se non ti piacciono i reindirizzamenti, potresti anche chiamare urllib2.install_opener(opener)
al tuo apri non reindirizzato.
Sembra che il tuo vero problema è che urllib2
non sta facendo i cookie nel modo desiderato. Vedi anche How to use Python to login to a webpage and retrieve cookies for later usage?
* Puoi provare a chiamare urllib2.build_opener (handler) tu stesso con un elenco che omette HTTPRedirectHandler, quindi chiamare il metodo open() sul risultato per aprire il tuo URL. * Bene, documenti per urllib2.build_opener() dice questo * Le istanze delle seguenti classi ** saranno davanti ai gestori **, a meno che i gestori li contengano, loro istanze o sottoclassi: ProxyHandler, UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler , HTTPErrorProcessor. * Sembra che ommiting 'HTTPRedirectHandler' non funzionerà ... –
Questa domanda è stata aperta prima del here.
MODIFICA: Se si ha a che fare con applicazioni Web bizzarre, è consigliabile provare mechanize. È una grande libreria che simula un browser web. Puoi controllare il reindirizzamento, i cookie, l'aggiornamento della pagina ... Se il sito web non si basa [pesantemente] su JavaScript, andrai molto d'accordo con mechanize.
Se tutto ciò che serve è arresto reindirizzamento, poi c'è un modo semplice per farlo. Ad esempio, desidero solo ottenere i cookie e per ottenere prestazioni migliori non desidero essere reindirizzato a un'altra pagina. Inoltre spero che il codice sia mantenuto come 3xx. usiamo il 302 per esempio.
class MyHTTPErrorProcessor(urllib2.HTTPErrorProcessor):
def http_response(self, request, response):
code, msg, hdrs = response.code, response.msg, response.info()
# only add this line to stop 302 redirection.
if code == 302: return response
if not (200 <= code < 300):
response = self.parent.error(
'http', request, response, code, msg, hdrs)
return response
https_response = http_response
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), MyHTTPErrorProcessor)
In questo modo, non avrete nemmeno bisogno di andare in urllib2.HTTPRedirectHandler.http_error_302()
caso Eppure più comune è che vogliamo semplicemente smettere di reindirizzamento (come richiesto):
class NoRedirection(urllib2.HTTPErrorProcessor):
def http_response(self, request, response):
return response
https_response = http_response
e normalmente usarlo in questo modo:
cj = cookielib.CookieJar()
opener = urllib2.build_opener(NoRedirection, urllib2.HTTPCookieProcessor(cj))
data = {}
response = opener.open('http://www.example.com', urllib.urlencode(data))
if response.code == 302:
redirection_target = response.headers['Location']
Proprio quello di cui avevo bisogno, e molto conciso 'classe NoRedirection()' - non hai nemmeno bisogno di memorizzare 'codice, msg, hdrs' - Grazie Alan. –
Hai ragione! E ho rimosso la linea come hai suggerito. Grazie Xtof. –
È possibile utilizzare questo approccio per ottenere l'URL di reindirizzamento effettivo? – AdjunctProfessorFalcon
- 1. Come impedire a jQuery ajax di seguire un reindirizzamento dopo un post?
- 2. Come si impedisce a Retrofit di seguire automaticamente un 302
- 3. Esiste un equivalente a urllib di python in c/C++?
- 4. Come impedire un file dal reindirizzamento .htaccess?
- 5. Python URLLib/URLLib2 POST
- 6. Come seguire un reindirizzamento in http.get in AngularJS?
- 7. Seguire il reindirizzamento con la richiesta node.js
- 8. python urllib usage
- 9. Equivalente di urllib Python in Haskell
- 10. Tempo di risposta per urllib in python
- 11. python httplib/urllib get filename
- 12. seguire un reindirizzamento pagina utilizzando rvest in R
- 13. Come impedire a Doctrine 2 di memorizzare un risultato in Symfony 2?
- 14. Come gestire il timeout di urllib in Python 3?
- 15. Come posso impedire a Outlook.com di seguire i collegamenti nell'e-mail?
- 16. Python os.walk + seguire symlink
- 17. Come seguire un file .lnk a livello di codice
- 18. socket ResourceWarning utilizzando urllib in Python 3
- 19. Accensione output di debug per Python 3 urllib
- 20. Zend Framework 2 Reindirizzamento
- 21. Come impedire a Python di propagare i segnali ai sottoprocessi?
- 22. Impedire il reindirizzamento per l'accesso a Spring Security
- 23. urllib Python che scarica il contenuto di una directory online
- 24. Python urllib urlencode problema con æøå
- 25. Richieste Python/urllib - monitoraggio dell'uso della larghezza di banda
- 26. Python: Entra in un sito web utilizzando urllib
- 27. impedire iframe dal reindirizzamento della pagina padre
- 28. Come seguire un reindirizzamento dopo click_link/pulsante con cetriolo e capibara nelle rotaie?
- 29. Javascript/jQuery: a livello di codice seguire un collegamento
- 30. reindirizzamento all'interno componente angolare 2
Du plicate: http://stackoverflow.com/questions/110498/is-there-an-easy-way-to-request-a-url-in-python-and-not-follow-redirects/110808 –
una domanda simile: http://stackoverflow.com/questions/9890815/python-get-headers-only-using-urllib2 – newtover