0

C++ ソケット。ウェブサイトから情報を取得します。

ソケットを使用して Web からコンテンツを読み取ろうとしています。次のコードを使用します。

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.yahoo.com」、「www.google.com」などの URL では正常に機能しますが、「www.google.com/nexus」などの URL では機能しません。

「/」を含む URL は、このコードでは機能しません。私は何か不足していますか?

4

3 に答える 3

3

getaddrinfoURL ではなく、ネットワーク アドレスに関する情報を提供します。URL はネットワーク アドレスではありませんが、ネットワーク アドレスが含まれていることがよくあります。「www.google.com/nexus」のような文字列は URL でもアドレスでもない (URL の一部である可能性はあるが) ため、getaddrinfo失敗しても驚くことではありません。

于 2013-10-14T05:45:46.100 に答える
1

man ページには、最初のパラメーターはホスト名であると書かれています。ホスト名は、最上位ドメインまでの最初の部分にすぎません。それ以降はすべてホスト名に属しません。特に URL に @ が含まれている場合は、以前の一部がホスト名に属していない可能性があることに注意してください。

URL のウィキペディアを調べてください。URL のどの部分が実際に関数に入れることができるホスト名であるかについての長い説明があります。

于 2013-10-14T05:47:00.670 に答える