当出现500错误时,如何从pycurl获取HTML输出?

时间:2012-04-10 22:35:25

标签: python pycurl

我正在尝试使用pycurl与服务器进行交互,我收到500错误。我希望能够看到从服务器返回的错误文本,但pycurl似乎没有给我一个方法来做到这一点。

例如,当我在服务器上指出'curl'时,我会得到这样的结果:

$ curl -H "Content-Type: text/xml; charset=utf-8" -k -d @subcase.xml -X POST https://192.168.1.110/vision.asmx
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <soap:Fault>
      <faultcode>soap:Server</faultcode>
      <detail>
        <ExceptionMessage>Invalid Case Objid -1 or idNumber 76029744 or Case is closed.</ExceptionMessage>
      </detail>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

但是当我尝试构建一些做同样事情的pycurl时,从服务器返回的HTML似乎被吞噬了:

class Storage:
    '''An object used to hold the output of a pyCurl command'''
    def __init__(self):
        self.contents = []
    def store(self, buf):
        self.contents.append(buf)
    def __str__(self):
        return '\n'.join(self.contents)

def go_get_it(url):
    curl_obj = pycurl.Curl()
    curl_obj.setopt(pycurl.URL, str(url))

    output = Storage()
    header = Storage()
    curl_obj.setopt(pycurl.WRITEFUNCTION, output.store)
    curl_obj.setopt(pycurl.HEADERFUNCTION, header.store)

    response = Response(header, output)
    if self.debug_level:
        curl_obj.setopt(pycurl.VERBOSE, 1)
        curl_obj.setopt(pycurl.DEBUGFUNCTION, self.curl_debug)
    try:
        curl_obj.perform()
        status_code = curl_obj.getinfo(pycurl.HTTP_CODE)
        response.set_status_code(status_code)
        return response
    except pycurl.error, curl_err:
        print curl_obj.errstr()

如果服务器没有抛出500错误,则output对象包含来自服务器的HTML响应。但是,当我们得到异常时,输出对象为空。 从服务器返回的HTML在curl_err中也不可用(据我所知)。

有没有人知道在这种情况下是否有办法恢复从服务器返回的HTML?

0 个答案:

没有答案