2014-02-23 4 views
0

나는 Poco net libraries를 사용하여 TwitchPlaysPokemon 스트림에 대한 업데이트를 몇 시간마다 이메일로 보내 줄 재미있는 프로그램을 만들기 위해 C++로 코드를 작성하고있다. 여기 내 코드 :매우 구체적인 웹 URL을 어떻게 처리합니까?

#include <iostream> 
#include "Poco/Net/SocketAddress.h" 
#include "Poco/Net/StreamSocket.h" 
#include "Poco/Net/SocketStream.h" 
#include "Poco/StreamCopier.h" 

using namespace std; 
using namespace Poco::Net; 
using namespace Poco; 

int main(int argc, char *argv[]) 
{ 
    string url = "www.reddit.com"; 

    string fullPage; 
    SocketAddress sa(url, 80); 
    StreamSocket socket(sa); 
    SocketStream str(socket); 
    str << "GET/HTTP/1.1\r\n" 
    "Host: " << url << "\r\n" 
    "\r\n"; 
    str.flush(); 

    StreamCopier::copyStream(str, cout);  
} 

이 정확한 코드는 완벽하게 작동합니다. www.reddit.com의 원시 HTML을 가져 와서 콘솔에 인쇄합니다.

다음 중 하나 : 그러나, 나는 내 프로그램에 대한 두 곳 중 하나에서 정보를 얻으려고

Here (URL = "http://www.reddit.com/live/sw7bubeycai6hey4ciytwamw3a")

또는

Here (URL = " https://sites.google.com/site/twitchplayspokemonstatus/ ")

이 두 가지 모두 내 용도에 맞게 사용할 수 있습니다. 문제는 프로그램에서 URL로이 값을 연결하면 프로그램에서 내가 무슨 말을하는지 전혀 알 수 없습니다. 특히, 나는 다음과 같은 얻을 :

Unhandled Exception

을 이렇게 명확하게 호스트를 찾을 수 없습니다. 이것은 인터넷 프로토콜, 호스트 등에 대해 거의 알지 못해서 내가 붙어있는 곳입니다. (cmd prompt ping을 사용하여)이 웹 사이트에 대한 특정 IP 주소가 있는지 확인하려고했으나 ("Ping 요청에서 호스트를 찾을 수 없습니다. www.reddit.com/live/sw7bubeycai6hey4ciytwamw3a"). Poco 라이브러리는 URL url (www.reddit.com), IPv4 및 IPv6 주소를 SocketAddress에 대한 호스트 입력으로 받아들입니다. 여기서 url 변수를 사용하면 다른 변수는 기본적으로 항상 있어야하는 포트입니다. 80)

질문 : 나는 내가 마시고 라이브러리에 호스트를 식별 할 방법을 알아내는 데 도움이 필요합니다. 즉, 위에 나열된 두 사이트 중 하나의 코드를 인식하고 페이지에서 HTML을 가져올 수있는 방식으로 호스트를 올바르게 참조하려면 어떻게해야합니까?

+0

예외가 발생할 때 "사례"를 찾아보십시오. 귀하의 코드에서 HostNotFound는 여러 가지 다른 경우에 던져진 것 같습니다. 응용 프로그램을 실행하는 동일한 컴퓨터의 브라우저에서 해당 링크를 탐색 할 수 있습니까? – mangusta

+0

어떤 예외적 인 경우가 제 예외인지 알 수 없습니다. 내가 휴식을 취하는 대신 계속하면, 몇 가지 예외는'DNSException ("EAI", NumberFormatter :: format (code));을 던져서 던져 DNSException ("해결하는 동안 임시 DNS 오류", arg); ', 그리고 마지막으로'DNSException을 던집니다 ("해결하는 동안 복구 할 수없는 DNS 오류", arg); 이것들이 일종의 도미노 효과인지 아니면 상호 배타적 인 예외인지 (확실하게 마지막 두개는 관련 됨) – user3330644

+0

SocketAddress 객체를 생성 할 때 전체 URL을 사용합니까?웹 사이트 주소 만 사용하고 GET 요청을 보낼 때는 전체 URL을 사용해야합니다. SocketAddress 생성자에 전체 URL을 전달하고 있습니다. 따라서 오류가 발생합니다. – mangusta

답변

0

HTTP를 제대로 이해하지 못하는 것 같습니다. 다음은 간단한 리 프레저입니다.

은 해당 HTTP 요청이 포트 80에서 www.example.com로 전송되는 URL을 http://www.example.com/path/page.html의 내용을 얻으려면, 그리고 내용을했을 :

GET /path/page.html HTTP/1.1\r\n 
Host: www.example.com\r\n 
\r\n  

당신처럼 보이지 않는다는 중요한 부분 여기서 올바르게 수행하는 것은 URL을 호스트 이름과 경로 구성 요소로 분리하는 것입니다. 하나의 url 변수를 사용하면 (수동으로 첫 번째 슬래시로 분할하지 않는 한) 작동하지 않습니다.

관련 문제