Длина ответа POST не равна нулю, но чтение пусто - PullRequest
2 голосов
/ 12 февраля 2012

Я слежу за этим примером веб-службы Virtuoso .Мой ответ от 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)

Return ...

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

Если вы намеренно искажаете XML (например, запрос">>" queryzzz ") ...

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

Я уверен, что просто делаю что-то глупое.Где мой ответ байта 19902 года?

1 Ответ

2 голосов
/ 12 февраля 2012

Изменение

conn.close()

data = re.read()

до

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

Вам необходимо прочитать данные перед закрытием соединения, иначе все еще не переданные байты будут потеряны.

...