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()