【问题标题】:poco httpclientsession giving host not found errors even though host resolves即使主机解析,poco httpclientsession 给主机未找到错误
【发布时间】:2013-11-04 20:16:58
【问题描述】:

我对 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>");

}

【问题讨论】:

  • 我遇到了这个问题。远程端口未打开。如果我的情况是 HTTP 80 未打开,我认为我正在打开 HTTPS 443,但我的应用程序逻辑中的一个错误将其指向 80。

标签: visual-c++ poco-libraries


【解决方案1】:

刚刚遇到类似的问题。请注意您的主机名是"http://s3.amazonaws.com"

主机的实际名称是"s3.amazonaws.com""http://" 部分指定协议。无论如何,HTTPClientSession 类只能用于 http 协议。

在我的情况下,剥离 "http://" 并仅使用实际主机名可以正常工作:"s3.amazonaws.com"

HTTPClientSession session("s3.amazonaws.com");

(好吧,就我而言,它是"http://ws.audioscrobbler.com",但这不是重点)。发现这是否真的是您的问题的答案可能为时已晚,该错误看起来与我的有点不同,但希望它可以帮助通过搜索到达这里的人,就像我一样。

【讨论】:

    【解决方案2】:

    重新构建 poco net 库,还是一样的错误。

    为了避免在这么简单的事情上浪费时间,刚刚改用 CHttpConnection(这也节省了大约 20MB 的库需求)。

    也许有经验的 poco 开发人员会想出更好的主意。

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 2016-09-12
      • 2016-01-23
      • 2017-01-24
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多