requests print instalar headers python redirect python-requests http-status-codes

print - Código de redireccionamiento HTTP 3XX en solicitudes de python



requests post python 3 (3)

Estoy tratando de capturar el código de estado http 3XX / 302 para una url de redireccionamiento. Pero no lo consigo porque da 200 códigos de estado.

Aquí está el código:

import requests r = requests.get(''http://goo.gl/NZek5'') print r.status_code

Supongo que esto debería emitir 301 o 302 porque redirige a otra página. Intenté pocas direcciones URL de redireccionamiento (por ejemplo, http://fb.com ) pero nuevamente se están emitiendo las 200. ¿Qué se debe hacer para capturar el código de redirección correctamente?


Esta solución identificará la redirección y mostrará el historial de redirecciones, y manejará los errores comunes. Esto te pedirá tu URL en la consola.

import requests def init(): console = input("Type the URL: ") get_status_code_from_request_url(console) def get_status_code_from_request_url(url, do_restart=True): try: r = requests.get(url) if len(r.history) < 1: print("Status Code: " + str(r.status_code)) else: print("Status Code: 301. Below are the redirects") h = r.history i = 0 for resp in h: print(" " + str(i) + " - URL " + resp.url + " /n") i += 1 if do_restart: init() except requests.exceptions.MissingSchema: print("You forgot the protocol. http://, https://, ftp://") except requests.exceptions.ConnectionError: print("Sorry, but I couldn''t connect. There was a connection problem.") except requests.exceptions.Timeout: print("Sorry, but I couldn''t connect. I timed out.") except requests.exceptions.TooManyRedirects: print("There were too many redirects. I can''t count that high.") init()


requests.get permite un argumento de palabra clave opcional allow_redirects que por defecto es True . La configuración de allow_redirects en False se deshabilitará automáticamente después de las redirecciones, de la siguiente manera:

In [1]: import requests In [2]: r = requests.get(''http://goo.gl/NZek5'', allow_redirects=False) In [3]: print r.status_code 301


requests maneja redirecciones para usted , ver redirección e historial .

Establezca allow_redirects=False si no desea que las requests manejen las redirecciones, o puede inspeccionar las respuestas de redirección contenidas en la lista r.history .

Manifestación:

>>> import requests >>> r = requests.get(''http://goo.gl/NZek5'') >>> r.history (<Response [301]>,) >>> r.history[0].status_code 301 >>> r.history[0].headers[''Location''] ''http://docs.python-requests.org/en/latest/user/quickstart/'' >>> r.url u''http://docs.python-requests.org/en/latest/user/quickstart/'' >>> r = requests.get(''http://goo.gl/NZek5'', allow_redirects=False) >>> r.status_code 301 >>> r.url u''http://goo.gl/NZek5''

Entonces, si allow_redirects es True , se han seguido las redirecciones y la respuesta final devuelta es la página final después de las siguientes redirecciones. Si allow_redirects es False , se devuelve la primera respuesta, incluso si es una redirección.