2012-09-10 5 views
0

Frustratingly 나는 Python 2.6.4에서 뭔가를 개발할 필요가 있으며, http 1.1 만 지원하는 것으로 보이는 서버에 삭제 요청을 보내야합니다. 그때 얻을HTTPConnection을 사용하여 DELETE 요청을 만듭니다. 505 응답

httpConnection = httplib.HTTPConnection("localhost:9080") 
httpConnection.request('DELETE', remainderURL) 
httpResponse = httpConnection.getresponse() 

응답 코드는 다음과 같습니다 : 505 (HTTP 버전이 지원되지 않습니다)

내가 같은 URL에 파이어 폭스의 위해 RESTClient를 통해 삭제 요청을 전송 테스트 한 그 작동 여기 내 코드입니다.

urllib2는 DELETE 요청을 지원하지 않으므로 사용할 수 없습니다. HTTPConnection 객체는 http 1.0입니까? 아니면 내가 잘못하고있는거야?

+0

HTTPConnection은 기본적으로 HTTP/1.1을 사용합니다. [505] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.6) * 서버 *에 문제가 있으므로 HTTP/HTTPS 버전을 지원하지 않는 것 같습니다. 1.1. –

답변

0

httplib은 HTTP/1.1을 사용합니다 (HTTPConnection.putRequest 메서드 설명서 참조).

httpResponse.version을 확인하여 서버가 사용중인 버전을 확인하십시오.

+0

덕분에, 나는 그것을 시도하고 버전은 11 (1.1) – jurasic

1

HTTPConnection 클래스는 전체적으로 HTTP/1.1을 사용하며 505은 HTTP/1.1 요청을 처리 할 수없는 서버임을 나타냅니다.

그러나 DELETE 요청을해야한다면 Requests package을 사용하지 않으시겠습니까? DELETE는 간단하다 : 마술 당신의 HTTP 버전 불일치가 해결되지 않습니다

import requests 

requests.delete(url) 

,하지만 당신은 무슨 일이 일어나고 있는지 알아 내기 위해 자세한 로깅을 사용할 수 있습니다 :

import sys 
requests.delete(url, config=dict(verbose=sys.stderr)) 
+0

으로 돌아왔다. 고맙습니다. 사용하고 싶지만, 회사와 오랜 오픈 소스 승인 절차를 밟을 것입니다. 내가 작업하고있는 큰 도구가 아니며 단순한 http 상호 작용을해야합니다. – jurasic

+1

@jurasic : 작은 외부 라이브러리에 승인이 필요합니까? 나는 네 회사를 불쌍히 여긴다. –

1

당신은 을 사용할 수 있습니다 urllib2 :

req = urllib2.Request(query_url) 
req.get_method = lambda: 'DELETE' # creates the delete method 
url = urllib2.urlopen(req)   # deletes database item 
관련 문제