autenticación de sesión en python

Al usar la sesión del módulo de requests en python, parece que la sesión envía autorización solo con la primera solicitud, no puedo entender por qué sucedió esto.

 import requests session = requests.Session() session.auth = (u'user', 'test') session.verify = False response = session.get(url='https://my_url/rest/api/1.0/users') 

Si busco los encabezados de esta solicitud de respuesta veo:

 {'Authorization': 'Basic auth_data', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.12.3'} 

pero si envío la siguiente solicitud usando la misma URL o no:

 response = session.get(url='https://my_url/rest/api/1.0/users') 

Puedo ver que ya no hay un encabezado de autenticación en la solicitud:

 print response.request.headers {'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.12.3'} 

Y estoy recibiendo respuesta 401 por eso.

¿Por que es esto entonces? ¿No debería la sesión enviar autenticación con cada solicitud hecha? ¿Cómo puedo enviar datos de autenticación con cada solicitud utilizando sesión?

Lo que veo cuando ejecuto ese código exacto en su comentario es que falta el encabezado de Authorization en la primera print , pero está presente en la segunda . Esto parece ser lo opuesto al problema que reporta.

Esto se explica por el hecho de que la primera solicitud se redirige mediante una respuesta 301, y el encabezado de autenticación no se propaga en la solicitud de seguimiento a la ubicación redirigida. Puede ver que el encabezado de autenticación se envió en la solicitud inicial buscando en response.history[0].request.headers .

La segunda solicitud no se redirige porque la sesión ha mantenido abierta la conexión con el host (debido al encabezado Connection: keep-alive ), por lo que los encabezados de autenticación aparecen cuando print response.request.headers .

Dudo que realmente estés usando https://test.com , pero probablemente algo similar está sucediendo con el servidor que estás usando.

Para las pruebas, recomiendo usar el servidor HTTP de prueba pública muy útil https://httpbin.org/headers . Esto devolverá los encabezados recibidos por el servidor en el cuerpo de la respuesta. Puede probar las solicitudes redirigidas con una de las URL de redireccionamiento.