我正在尝试使用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?