HTTPConnection для выполнения запроса DELETE: 505 ответ

К сожалению, мне нужно что-то разрабатывать на Python 2.6.4, и мне нужно отправить запрос на удаление на сервер, который поддерживает только http 1.1. Вот мой код:

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

Затем я получу код ответа: 505 (версия HTTP не поддерживается)

Я протестировал отправку запроса на удаление через RESTClient Firefox на тот же URL, и это работает.

Я не могу использовать urllib2, потому что он не поддерживает запрос DELETE. Является ли объект HTTPConnection только http 1.0? Или я что-то не так делаю?

3 ответа

Вы можете использовать urllib2:

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

HTTPConnection класс использует HTTP/1.1 повсюду, а 505, кажется, указывает, что это сервер, который не может обрабатывать запросы HTTP/1.1.

Однако, если вам нужно сделать DELETE запросы, почему бы не использовать пакет запросов вместо? DELETE так же просто, как:

import requests

requests.delete(url)

Это волшебным образом не устранит несоответствие версии HTTP, но вы можете включить подробное ведение журнала, чтобы выяснить, что происходит:

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

httplib использует HTTP/1.1 (см. документацию по методу HTTPConnection.putRequest).

Проверьте httpResponse.version, чтобы увидеть, какую версию использует сервер.

Другие вопросы по тегам