2013-10-14 1 views
0

C++ 소켓. 웹 사이트에서 정보 얻기.큰 URL을위한 C++ getaddrinfo 프로세스가 없습니다

소켓을 사용하여 웹에서 콘텐츠를 읽으려고합니다. 다음 코드를 사용하십시오.

int status = getaddrinfo(l_url.c_str(), "http", &l_address, &l_addr_ll); 
if (status != 0){ 
    printf("\n ***** getaddrinfo() failed: %s\n", gai_strerror(status)); 

    return FAILURE; 
} 

코드는 "www.google.com/nexus"와 같은 URL 년대에 "www.yahoo.com", "www.google.com을"그러나 그것은 나던 작품처럼 URL에 대해 잘 작동합니다.

"/"가있는 모든 URL이이 코드와 작동하지 않습니다. 내가 놓친 게 있니?

답변

3

getaddrinfo은 URL이 아닌 네트워크 주소에 대한 정보를 제공합니다. URL은 네트워크 주소가 아니지만 종종 하나가 포함됩니다. "www.google.com/nexus"와 같은 문자열은 URL 또는 주소가 아니기 때문에 (URL의 일부일지라도) getaddrinfo은 실패합니다.

+0

어떤 반응이 빠른 응답 CHris !! 명성. – kris123456

+0

이것이 어떻게 해결 될 수 있는지에 대한 조언 chris? 특정 웹 사이트의 데이터가 필요합니다. 정보에 따르면 "google.com/nexus", "apple.com/imac"등과 같은 URL에 액세스 할 수 있습니다. 내 코드에서 변경해야 할 사항은 무엇입니까? – kris123456

+0

@ kris123456 : 가장 쉬운 해결책은 getaddrinfo 대신 URL 라이브러리 (예 : libcurl (http://curl.haxx.se/libcurl/))를 사용하는 것입니다. –

1

맨 페이지는 첫 번째 매개 변수가 호스트 이름으로되어 있다고 말합니다. 호스트 이름은 최상위 도메인까지의 첫 부분입니다. 그 이후의 모든 것은 호스트 이름에 속하지 않습니다. 특히 URL에 @가 표시되면 앞 부분의 일부가 호스트 이름에 속하지 않을 수도 있습니다.

wikipedia for URL을 살펴보면, URL의 일부분이 실제로 당신의 기능에 넣을 수있는 호스트 이름이라는 오랜 설명이 있습니다.

+0

이러한 데이터를 읽는 방법에 대한 조언이 있으십니까? nvoigt. – kris123456

+0

다양한 시나리오와 솔루션이 있습니다 (http://stackoverflow.com/questions/2616011/easy-way-to-parse-a-url-in-c-cross-platform). – nvoigt

0

맨 페이지마다. getaddressinfo 메소드에 URL 정보를 전달해야합니다. 이 경우 사용자는 웹 사이트의 이름을 전달해야합니다. 같은에게 "www.google.com" 그러나 그 시점에서 데이터에 대한 사용자의 게시물 요청을 요청하면서, 사용자가 "www.google.com/nexus"와 같은 URL을 게시 할 수있는 것은

  • 주소가있을 것 URL과 동일합니다. 그러나 요청은 다양하므로 ".com"까지만 사용하는 웹 사이트의 주소를 알아야합니다. 주소 정보가 수신되면 그에 따라 추가 요청을 할 수 있습니다.
관련 문제