2012-02-12 9 views
2

私はthis Virtuoso Web Service exampleに従っています。私のPOSTからの応答はゼロではない.lengthですが、.read()は空です。これは、POSTが成功した場合にのみ発生します。私が意図的に間違いを犯すと、ゼロ以外の.read()が得られます。あなたが意図的にXML(例えば、 "クエリ" >> "queryzzzを")malform場合POST応答の長さはゼロではありませんが、読み取りは空です

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 

...

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

私は私は確信していますちょうど何かばかげている。私の19902バイト応答はどこですか?

+0

re.length()にはヘッダーの長さが含まれていますか? – pycoder112358

答えて

2

変更するには、接続または任意のまだ転送されたバイトが失われますを閉じる前にデータを読み込む必要があり

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

conn.close() 

data = re.read() 

関連する問題