2013-03-20 6 views
3

나는 elasticsearch를 사용하고 RESTful API 지원은 검색 기준에 대한 GET 요청의 본문 읽기를 지원합니다.본문과 함께 GET 요청 보내기

나는 현재 data가 존재

response = urllib.request.urlopen(url, data).read().decode("utf-8") 

경우하고있어, 그것은 POST, 그렇지 않으면 GET을 발행합니다. 데이터 (POST 요청 본문에 있어야 함)를 포함하고 있음에도 불구하고 GET을 강제로 수행 할 수 있습니까?

Nb : URL에는 source 속성을 사용할 수 있지만 쿼리는 사용할 수 있습니다. 우리는 실행 중이고 복잡하고 쿼리 정의가 매우 길어 쿼리가 매우 길어집니다.

+2

로이 필딩 [이슈에 대한 의견] (http://tech.groups.yahoo.com/group/rest-discuss/message/9962) (http : // stackoverflow)을 사용하여 전화하십시오. .com/questions/978061/http-get-with-request-body), 이것은 HTTP 스펙의 남용 인 것처럼 보이며 해결책은 이것에 의존하는 탄성 인 검색 사람들을 무너 뜨릴 것입니다. 기본적으로 요청 본문은 서버가 존재할 때 충돌이 발생하지 않는 한 허용되지 않으며 어떤 방식 으로든 처리되어야하기 때문에 발생하지 않습니다. (Wiki에 따르면, Roy Fielding은 HTTP의 저자이자 REST의 창안자이기 때문에 그가 알고 있다고 생각합니다.) – millimoose

+0

@millimoose 의미있는 논점입니다. REST 서비스를 고려할 때 의미가 있습니다. GET은 통신 메커니즘이 아니라 논리적 동작과 관련이 있습니다. – Basic

+0

그렇다면 [http.client'] (http://docs.python.org/3.0/library/http.client.html)는 'urllib'를 사용하여 "비정상적인"요청을 구성 할 수 있습니다. – millimoose

답변

7

나는 urllib을 사용하여 좋은 방법을 알지 못합니다. 데이터가 실제로 전송되는 것을 표시하는 소정의 테스트 웹 서버를 구성

requests.request(method='get', url='localhost/test', data='some data') 

그러나, requestsrequests.request * 함수를 사용하여 사소한 (임의 동사 요청 콘텐츠와 사실 사소한) 만든다 요청의 본문과 서버가 인식하는 메소드가 실제로 GET이라는 것을 의미합니다.

* 실제 기능 정의가있는 곳이기 때문에 코드 requests.api.requests에 링크되어 있습니다. requests.request(...)

+0

+1 : 요청이 존재한다는 것을 잊어 버렸습니다. 아마도 http.client보다 덜 부담 스러울 것입니다. – millimoose

+0

그건 좋은 타협처럼 들리 겠지만, 나는 그것을 바랄 것이다. 그럼에도 불구하고 @millimoose 당신의 도움에 감사드립니다. – Basic

관련 문제