Сокеты 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;
}
Код прекрасно работает для URL-адресов, таких как «www.yahoo.com», «www.google.com», однако он не работает для URL-адресов, таких как «www.google.com/nexus».
Все URL, имеющие «/», не работают с этим кодом. Я что-то пропустил?
getaddrinfo
дает вам информацию о сетевых адресах, а не об URL-адресах. URL не является сетевым адресом, хотя часто содержит его. Строка типа «www.google.com/nexus» не является ни URL-адресом, ни адресом (хотя вполне может быть частью URL-адреса), поэтому не удивительно, что getaddrinfo
терпит неудачу для этого.
Страница man говорит, что первый параметр должен быть именем хоста. Имя хоста — это только первая часть вплоть до домена верхнего уровня. Все после этого не принадлежит имени хоста. Будьте осторожны, некоторые части могут также не принадлежать имени хоста, особенно если вы видите @ в своем URL.
Заглянуть в Википедия для URL, есть длинное объяснение, какая часть URL на самом деле является именем хоста, которое вы можете вставить в свою функцию.
Согласно справочной странице. необходимо передать информацию об URL в метод getaddressinfo. Для этого пользователь должен передать название веб-сайта. как «www.google.com» Однако, запрашивая данные, пользователь отправляет запрос, после чего пользователь может опубликовать URL-адрес, например «www.google.com/nexus».