2014-11-20 5 views
3

파이썬 요청 모듈을 사용하여 사이트에 대한 테스트를하고 있습니다.Python 요청이 POST에서 Content-Length 헤더를 제거했습니다.

요청 모듈을 사용하면 키가 없음으로 설정된 사전을 전달하여 특정 헤더를 제거 할 수 있습니다. 예를 들어

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

은 요청과 함께 사용자 에이전트가 전송되지 않도록합니다.

그러나 데이터를 게시 할 때 없음 또는 잘못된 값을 지정하더라도 요청이 올바른 Content-Length를 계산하는 것으로 보입니다. 예 :

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

는 I 요청 (response.request.headers)에서 사용되는 헤더에 대한 응답을 체크하고 난 콘텐츠 길이가 올바른 값으로 다시 추가되었다 볼 수있다. 이렇게 멀리 나는이 행동을 무력하게하는 어떤 방법도 볼 수 없다

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을 참조하십시오. 이 경우 No Content-Length 헤더가 설정됩니다.