сокеты — c ++ getaddrinfo не обрабатывает большие URL

Сокеты 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, имеющие «/», не работают с этим кодом. Я что-то пропустил?

0

Решение

getaddrinfo дает вам информацию о сетевых адресах, а не об URL-адресах. URL не является сетевым адресом, хотя часто содержит его. Строка типа «www.google.com/nexus» не является ни URL-адресом, ни адресом (хотя вполне может быть частью URL-адреса), поэтому не удивительно, что getaddrinfo терпит неудачу для этого.

3

Другие решения

Страница man говорит, что первый параметр должен быть именем хоста. Имя хоста — это только первая часть вплоть до домена верхнего уровня. Все после этого не принадлежит имени хоста. Будьте осторожны, некоторые части могут также не принадлежать имени хоста, особенно если вы видите @ в своем URL.

Заглянуть в Википедия для URL, есть длинное объяснение, какая часть URL на самом деле является именем хоста, которое вы можете вставить в свою функцию.

1

Согласно справочной странице. необходимо передать информацию об URL в метод getaddressinfo. Для этого пользователь должен передать название веб-сайта. как «www.google.com» Однако, запрашивая данные, пользователь отправляет запрос, после чего пользователь может опубликовать URL-адрес, например «www.google.com/nexus».

  • Адрес будет таким же для URL. однако запрос варьируется, поэтому нужно получить адрес сайта, используя только до «.com». Как только информация об адресе получена, дальнейшие запросы могут быть сделаны соответственно.
0
По вопросам рекламы [email protected]