2012-05-30 24 views
1

在我的項目中,我遇到了一個嚴重的問題,哪個程序無法接收數據然後崩潰。 這些都是我的代碼:POCO如何發送XML數據?

HTTPClientSession s("x.x.x.x",8000); 
HTTPRequest request(HTTPRequest::HTTP_POST); 
std::ostream& send = s.sendRequest(request); 
std::string body = "<a> xml </a>"; 
request.setContentLength(body.length()); 
send << body <<std::flush; 
HTTPResponse response; 
std::istream& res = s.receiveResponse(response); 
StreamCopier::copyStream(res, std::cout); 

後,我運行它,當我的程序從服務器接收數據時,它墜毀並引發

Poco::Net::messageException 

。哦,我的上帝! 我追查到POCO的內部代碼,發現:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 

在VS2005我的數據sended屬性。 與此同時,Poco發現<!DOCTYPE的最後一個字母是E,這不是空格,所以它拋出異常。 做任何一個入侵案件?誰可以幫助我?非常感謝你!

回答

1

我以幾乎相同的方式發送數據。我的代碼只有一個區別。

request.setContentType("text/xml; charset=utf-8"); 

按照波蘇庫的源代碼,異常「​​波科::網:: MessageException」是因爲,從HTTP服務器格式錯誤的響應的提高。

+0

我將這些代碼添加到我的項目中,但沒有任何反應。@ Denis Novikov –

+0

,你能給我一個樣本來介紹你的想法,謝謝! –

+0

當我嘗試google.com(ip =「173.194.32.164」)的代碼時,我沒有發現任何異常。當我嘗試使用Poco :: Net :: HTTPServerSession自己編寫的服務器時,也會發生同樣的情況。 但是有些服務器在返回時不返回HTTP頭。這就是MessageException的原因。 –