POST响应长度为非零,但读取为空

时间:2012-02-12 18:46:13

标签: python http post dbpedia virtuoso

我关注this Virtuoso Web Service example。我的POST响应有一个非零.length,但.read()是空的。这仅在POST成功时发生。如果我故意犯了错误,我会得到一个非零的.read()。

import httplib
url = 'lod.openlinksw.com'   

xmlString = '''<?xml version="1.0"?>
<query xmlns="http://openlinksw.com/services/facets/1.0" inference="" same-as="">
  <text>Seattle Mariners traveled all the way to Japan to watch</text>
  <view type="text" limit="20" offset=""/>
</query>'''

xml = open('a.xml','w')
xml.write(xmlString)
xml.close()
xml = open('a.xml')

headers = {'Content-Type': 'text/xml',}
conn = httplib.HTTPConnection(url)
conn.request("POST", "/fct/service", xml, headers)
re = conn.getresponse()
conn.close()

data = re.read()
print re.reason, re.status, '| len:', re.length, '| read() len:', len(data)

...返回

OK 200 | len: 19902 | read() len: 0

如果您故意使XML格式错误(例如“查询”&gt;&gt;“queryzzz”)......

Internal Server Error 500 | len: 0 | read() len: 340

我确信我只是在做些傻事。我的19902字节响应在哪里?

1 个答案:

答案 0 :(得分:2)

更改

conn.close()

data = re.read()

data = re.read()
conn.close()

您需要在关闭连接之前读取数据,否则任何尚未传输的字节都将丢失。