poco httpclientsession выдает ошибки host not found, даже если host разрешает

У меня странная проблема с poco. Я могу построить его нормально и связать с тестовым приложением. Однако, когда я загружаю URL-адрес, независимо от того, какой URL-адрес я использую, он сообщает об исключении HostNotFound. Файл доступен в браузерах инкогнито везде и разрешается в DNS .... Я несколько затрудняюсь решить эту проблему ... есть идеи?

// DNS на машине показывает ошибку nslookup s3.amazonaws.com Server: UnKnown Address: 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>");

}

person feynmansbastard    schedule 04.11.2013    source источник
comment
У меня была эта проблема. Удаленный порт не был открыт. В моем случае HTTP 80 не был открыт, и я думал, что открываю HTTPS 443, но ошибка в логике моего приложения направляла его к 80.   -  person Homer6    schedule 18.04.2017


Ответы (2)


Только что была аналогичная проблема. Обратите внимание, что имя вашего хоста — "http://s3.amazonaws.com".

Фактическое имя хоста"s3.amazonaws.com". Часть "http://" определяет протокол. В любом случае класс HTTPClientSession должен использоваться только для протокола http.

В моем случае удаление "http://" и просто использование фактического имени хоста сработало правильно: "s3.amazonaws.com":

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

(Ну, в моем случае это было "http://ws.audioscrobbler.com", но это не относится к делу). Вероятно, слишком поздно, чтобы узнать, действительно ли это было решением вашей проблемы, ошибка выглядит немного иначе, чем моя, но, надеюсь, это может помочь кому-то, кто пришел сюда через поиск, как это сделал я.

person BoBTFish    schedule 28.02.2016

пересобрал библиотеку poco net, все равно получил ту же ошибку.

чтобы не тратить время на что-то такое простое, просто переключился на использование CHttpConnection (что также сэкономило около 20 МБ требований к библиотеке).

возможно, опытные разработчики poco придумают лучшую идею.

person feynmansbastard    schedule 04.11.2013