我对poco有一个奇怪的问题。我可以很好地构建它,并将其链接到测试应用程序。但是当我下载一个url时,无论我使用什么url,它都会报告一个HostNotFound异常。该文件可以在任何地方的隐身浏览器中访问,并可在dns中解析....我有点不知道对此进行故障排除...任何想法?
//显示错误的机器上的dns nslookup s3.amazonaws.com 服务器:未知 地址:192.168.0.1
非权威性答案: 姓名:s3-1.amazonaws.com 地址:72.21.215.196 别名:s3.amazonaws.com s3.a-geo.amazonaws.com
// calling helper
CString host("http://s3.amazonaws.com");
CString path("/mybucket.mycompany.com/myfile.txt");
CString errmsg;
CString data = GetURL(host,path,errmsg);
// poco helper code
CString GetURL(CString host, CString path_query, CString &debmsg)
{
debmsg = CString("");
try
{
// convert request
std::string tmphost((LPCTSTR)host);
std::string tmppath((LPCTSTR)path_query);
// creation session and request
HTTPClientSession session(tmphost,80);
// disable proxy
session.setProxyHost("");
HTTPRequest req(HTTPRequest::HTTP_GET,tmppath,HTTPMessage::HTTP_1_1);
// send request
session.sendRequest(req);
// get response
HTTPResponse res;
std::istream * response = &session.receiveResponse(res);
// convert it back to mfc string
streambuf *pbuf = response->rdbuf();
std::ostringstream ss;
ss << pbuf;
CString data(ss.str().c_str());
return data;
}
catch (Poco::Exception& ex)
{
CString err(ex.displayText().c_str());
debmsg.Format("error getting url: %s%s err: %s",host,path_query,err);
}
return CString("<error>");
}
答案 0 :(得分:4)
刚遇到类似的问题。请注意,您的主机名为"http://s3.amazonaws.com"
。
主机的实际名称为"s3.amazonaws.com"
。 "http://"
部分指定协议。无论如何,类HTTPClientSession
仅用于http协议。
在我的情况下,剥离"http://"
并仅使用实际主机名正常工作:"s3.amazonaws.com"
:
HTTPClientSession session("s3.amazonaws.com");
(嗯,在我的情况下,它是"http://ws.audioscrobbler.com"
,但这不是重点。)可能为时已晚,无法确定这是否真的是您的问题的答案,错误看起来与我的有点不同,但希望它可以帮助通过搜索到达这里的人,就像我一样。
答案 1 :(得分:-1)
重建poco网库,仍然遇到同样的错误。
为了避免浪费时间这么简单,只需切换到使用CHttpConnection(这也节省了大约20MB的库要求)。
也许经验丰富的poco开发人员会想出更好的主意。