Las solicitudes de Python eliminan el encabezado Content-Length de POST

Estoy usando el módulo de solicitudes de Python para hacer algunas pruebas en un sitio.

El módulo de solicitudes le permite eliminar ciertos encabezados pasando un diccionario con las claves configuradas en Ninguna. Por ejemplo

headers = {u'User-Agent': None} 

se asegurará de que no se envíe ningún agente de usuario con la solicitud.

Sin embargo, parece que cuando publico datos, las solicitudes calcularán la longitud de contenido correcta para mí, incluso si no especifico Ninguno, o un valor incorrecto. P.ej.

 headers = {u'Content-Length': u'999'} headers = {u'Content-Length': None} 

Reviso la respuesta de los encabezados utilizados en la solicitud (response.request.headers) y puedo ver que el contenido de longitud se ha vuelto a agregar con el valor correcto. Hasta ahora no puedo ver ninguna manera de deshabilitar este comportamiento

 CaseInsensitiveDict({'Content-Length': '39', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept-Encoding': 'gzip, deflate, compress', 'Accept': '*/*', 'User-Agent': 'python-requests/2.2.1 CPython/2.7.6 Linux/3.13.0-36-generic'}) 

Me gustaría REALMENTE quedarme con el módulo de solicitudes para hacer esto. es posible?

Tendrá que preparar la solicitud manualmente , luego eliminar el encabezado de longitud de contenido generado:

 from requests import Request, Session s = Session() req = Request('POST', url, data=data) prepped = req.prepare() del prepped.headers['content-length'] response = s.send(prepped) 

Tenga en cuenta que la mayoría de los servidores HTTP compatibles pueden ignorar el cuerpo de su publicación.

Si pretendía usar la encoding de transferencia fragmentada (donde no tiene que enviar una longitud de contenido), use un iterador para el parámetro de data . Consulte Solicitudes codificadas en trozos en la documentación. En ese caso no se establecerá ningún encabezado Content-Length .