python http客户端没有响应原因和错误的响应状态

时间:2018-01-23 15:28:24

标签: python getresponse

我使用python 2.6创建可以POST XML数据的HTTPS客户端。到目前为止它能够POST到我也写过的HTTP服务器。问题在于,当我尝试从响应中返回状态和原因时,它是不正确的。

HTTPS服务器应返回具有HTTP 202状态的空响应。当我使用curl POST它时,它会正确地返回我期望的内容。 HTTPS python客户端获取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,就像我之前提到的那样,当我使用curl时,我可以获得202状态和接受的原因。我已经看到了关于阅读响应和/或关闭连接的一些内容,但我还没有找到需要这样做的示例。

1 个答案:

答案 0 :(得分:0)

真正的问题是服务器而不是客户端。发现连接在客户端预期之前终止。这是因为服务器在发送响应之前没有读取传入请求的主体。我不需要因为任何原因阅读它,所以我忽略了这样做。

def do_POST(self):
    body = self.rfile.read("0")
    self.send_response(200)
    self.send_header("Content-type", "application/xml")
    self.end_headers()