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
терпит неудачу.
На странице руководства говорится, что первый параметр должен быть именем хоста. Имя хоста - это только первая часть домена верхнего уровня. Все после этого не принадлежит имени хоста. Будьте осторожны, некоторые части до этого также могут не принадлежать имени хоста, особенно если вы видите @в своем URL-адресе.
Посмотрите на wikipedia для URL-адреса, есть длинное объяснение, какая часть URL-адреса фактически является именем хоста, которое вы можете поместить в свою функцию.
Согласно странице руководства. необходимо передать информацию URL-адреса методу getaddressinfo. В этом случае пользователь должен передать имя веб-сайта. например, "www.google.com". Однако при запросе данных пользователь отправляет запрос, в этот момент пользователь может опубликовать URL-адрес, например "www.google.com/nexus",