2013-11-04 2 views
1

poco에 이상한 문제가 있습니다. 잘 만들었고 테스트 응용 프로그램에 연결할 수 있습니다. 그러나 URL을 다운로드 할 때 어떤 URL을 사용하더라도 HostNotFound 예외를보고합니다. 이 파일은 어디서나 시크릿 브라우저에서 액세스 할 수 있으며 DNS에서 확인할 수 있습니다. 문제 해결을 위해 다소 어려움이 있습니다 ... 아이디어가 있습니까? 알 수없는 주소 : 192.168.0.1poco httpclientsession에서 호스트가 확인되는 경우에도 호스트를 찾을 수 없음

신뢰할 수없는 응답 : 이름 : s3-1.amazonaws.com 주소 오류 nslookup을 s3.amazonaws.com 서버를 표시하는 시스템에

는 // DNS : 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

이 문제가 발생했습니다. 원격 포트가 열려 있지 않습니다. 제 경우 인 HTTP 80이 열려 있지 않았고 HTTPS 443을 열어 보았습니다.하지만 응용 프로그램 논리의 버그로 인해 80으로 향하게되었습니다. – Homer6

답변

0

다시 마시고 그물 라이브러리는 여전히 같은 오류가 발생했습니다.

너무 단순한 무언가로 시간 낭비를 피하려면 CHttpConnection (라이브러리 요구 사항 약 20MB 저장)을 사용하도록 전환해야합니다.

아마 경험있는 poco 개발자가 더 좋은 아이디어를 내놓을 것입니다.

4

비슷한 문제가있었습니다. 호스트 이름은 "http://s3.amazonaws.com"입니다.

호스트의 실제 이름"s3.amazonaws.com"입니다. "http://" 부분은 프로토콜을 지정합니다. 어쨌든 클래스 HTTPClientSession은 http 프로토콜 용으로 만 사용됩니다. "s3.amazonaws.com" : 다음 "http://"을 제거하고 바로 실제 호스트 이름이 제대로 일을 사용하여 내 경우

,

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

(글쎄, 내 경우는 "http://ws.audioscrobbler.com"했지만, 그 점 옆입니다). 아마 이것이 당신의 문제에 대한 답인 지 알기에는 너무 늦었을 것입니다. 오류는 제 생각과 약간 다릅니다.하지만 잘하면 누군가가 검색을 통해 여기에 도착하는 것을 도울 수 있습니다.