http-клиент Python: нет причины ответа и неверный статус ответа

Я использую Python 2.6 для создания клиента HTTPS, который может POST XML-данных. До сих пор он может POST к серверу HTTP, который я также написал. Проблема в том, что когда я пытаюсь вернуть статус и причину из ответа, это не правильно.

Сервер HTTPS должен вернуть пустой ответ со статусом HTTP 202. Когда я использую curl для POST, он правильно возвращает то, что я ожидаю. Клиент Python HTTPS возвращает HTTP 200 и пустую причину. Это похоже на то, что объект ответа, который я анализирую, неверен или не был создан из правильного запроса.

import httplib

def https_client(client_host, client_port, client_key, client_cert, xml_file, client_path)

    headers = {"Content-type" : "application/xml"}

    http_post = httplib.HTTPSConnection(client_host, client_port, client_key, client_cert)
    http_post.request("POST", "/" + client_path, xml_file, headers)
    response1 = http_post.getresponse()
    print response1.status, response1.reason

Консоль возвращает:

200

Сервер получает POST, и, как я уже упоминал ранее, я могу получить статус 202 и причину Принято при использовании curl. Я видел что-то о прочтении ответа и / или закрытии соединения, но я не нашел примера необходимости сделать это.

1 ответ

Истинная проблема была с сервером, а не с клиентом. Было обнаружено, что соединение было разорвано раньше, чем ожидал клиент. Это произошло из-за того, что сервер не прочитал тело входящего запроса перед отправкой ответа. Мне не нужно читать это по какой-либо причине, поэтому я не стал этого делать.

def do_POST(self):
    body = self.rfile.read("0")
    self.send_response(200)
    self.send_header("Content-type", "application/xml")
    self.end_headers()
Другие вопросы по тегам