2014-12-02 4 views
0

파이썬에서 requests 모듈을 사용하고 있는데 URL 뒤에 후행 슬래시를 추가하는 데 문제가있는 것으로 보입니다. 나는 다른 방법 (replace, regex)을 사용하여이를 제거하려했지만 어떤 차이도없는 것처럼 보였다. 일부 세부 정보가 개인 정보 보호의 이유로 분명히 바뀌 었습니다. :)Python HTTP 요청 URL 끝 슬래시

url = 'http://example.com:8000' 
payload = {} 
payload['summary'] = "test" 
payload['service'] = 10 
payload['template'] = 'XXX11112222' 
payload['user_name'] = 'john_smith' 
payload['justification'] = 'required' 
payload['start_date'] = '1417737600' 
payload['end_date'] = '1417759200' 
r = requests.post(url, params=payload) 
print(r.url) 

인쇄 된 URL이 이와 같이 나옵니다.

http://X.X.X.X:8000/?end_date=1417759200&business_justification=required&service=10&summary=test&template=XXX11112222&user_name=john_smith&start_date=1417737600 

그리고이 응답을 제공합니다.

200 
400 No requested_service or service Parameter Provided 

는 그 URL을 잡고 그것을 잘 작동 '?' 전에 '/'을 브라우저에 넣어 제거합니다. 예 : http://example.com:8000?....이 작동하지만 http://example.com:8000/?...은 그렇지 않습니다. 하지만 파이썬 스크립트의 URL에서 후행 슬래시를 제거하는 방법을 배울 수는 없습니다.

답변

1

서버에 결함이 있으며 requests 라이브러리가 아닙니다. section 3.2.2에서

는 HTTP RFC 상태 :

URL에 abs_path가 명시되어 있지 않은 경우, 그것은으로 제공해야합니다 "/"자원

에 대한 요청-URI로 사용하는 경우

경로가없는 URL (예 : http://X.X.X.X:8000)은 절대 경로 구성 요소가 없으므로 표준에 따라 /으로 설정됩니다. 경로가 없을 때 서버가 다르게 응답하면이 해당 표준을 위반합니다.

remove the default value for the path portion of a URLrequests 소스 코드 패치를 적용하지 않아도됩니다. 이 작업은 other locations too에서 완료해야합니다. 나는 철저한 조사를하지 않았다.

+0

안녕 Martijn, 네가 맞아 보이는 것처럼, 문제는 간단한 수정보다 더 깊은 의미가있다. 내 문제가 해결되지 않았는데도 귀하의 답변을 올바르게 표시해야합니까? 아니면 그냥두고 봐야 할 것인가, 스택 에티켓이 이런 종류의 것에 대한 것인지 모르겠다. :) – dlyxzen

+0

체크 표시는 * 가장 도움이되는 * 게시물을 찾았다는 것을 의미한다. 너 또는 내 도움이 전적으로 당신에게 달려있는 게시물을 찾았어요! 정말로 '문제 해결'을 의미 할 필요는 없습니다. 당신의 질문 *이 해결되었습니다. –