0

C++ 套接字。从网站获取信息。

我正在尝试使用套接字从网络读取内容。使用以下代码。

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”等网址,但不适用于“www.google.com/nexus”等网址。

任何带有“/”的 URL 都不适用于此代码。我错过了什么吗?

4

3 回答 3

3

getaddrinfo为您提供有关网络地址的信息,而不是有关 URL 的信息。URL 不是网络地址,尽管它通常包含一个。像“www.google.com/nexus”这样的字符串既不是 URL 也不是地址(尽管它很可能是 URL 的一部分),因此getaddrinfo失败并不奇怪。

于 2013-10-14T05:45:46.100 回答
1

手册页说第一个参数应该是主机名。主机名只是顶级域的第一部分。此后的一切都不属于主机名。请注意,之前的某些部分也可能不属于主机名,尤其是当您在 URL 中看到 @ 时。

查看wikipedia for URL,有一个冗长的解释 URL 的哪一部分实际上是您可以放入函数中的主机名。

于 2013-10-14T05:47:00.670 回答
0

根据手册页。需要将 URL 信息传递给 getaddressinfo 方法。为此,用户必须传递网站的名称。像“www.google.com” 但是在请求数据时,用户会发布一个请求,此时,用户可以发布像“www.google.com/nexus”这样的 URL

  • URL 的地址将相同。但是请求会有所不同,因此需要仅使用“.com”来获取网站的地址。一旦收到地址信息,就可以相应地提出进一步的请求。
于 2013-10-14T08:28:01.157 回答