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.