2014-11-20 5 views
3

Я использую модуль запросов python для проведения некоторых тестов с сайтом.Запросы Python удаляют заголовок Content-Length из POST

Модуль запросов позволяет удалить определенные заголовки, передав их в словаре с ключами, установленными на None. Например,

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

гарантирует, что ни один пользовательский агент не будет отправлен с запросом.

Однако, кажется, что когда я отправляю данные, запросы будут вычислять правильную длину Content для меня, даже если я укажу None или неправильное значение. Например.

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

проверить ответ для заголовков, используемых в запросе (response.request.headers), и я могу видеть Контент-Length был повторно добавлен с правильным значением. До сих пор я не могу видеть, как отключить это поведение

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'}) 

Я бы очень хотел остаться с модулем запросов, чтобы сделать это. Это возможно?

ответ

8

Вы должны prepare the request manually, а затем удалить сгенерированный заголовок длины содержимого:

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) 

Обратите внимание, что большинство совместимых серверов HTTP может затем игнорировать свой пост тело!

Если вы хотите использовать chunked transfer encoding (где вам не нужно отправлять длину содержимого), используйте итератор для параметра data. См. Chunked-Encoded Requests в документации. В этом случае будет установлен заголовок Content-Length.

 Смежные вопросы

  • Нет связанных вопросов^_^