2012-09-10 28 views
0

令人沮喪我需要開發Python 2.6.4的東西,並需要發送刪除請求到似乎只支持http 1.1的服務器。這裏是我的代碼:HTTPConnection使DELETE請求:505響應

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

響應代碼,然後我得到的是:505(HTTP版本不支持)

我測試過的節點,經Firefox的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)是* server *的問題,所以* it *似乎不支持版本HTTP/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是簡單的:

import requests 

requests.delete(url) 

這不會神奇地解決您的HTTP版本不匹配,但可以啓用詳細日誌記錄,以弄清楚是怎麼回事:

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