2012-03-29 5 views
1

Я посылаю HTTP GET запрос и получение данных здесь:Как проверить, что веб-страница существует

ssize_t numBytes = recvfrom(sock, request, 1000, 0, 
        (struct sockaddr *) &myaddr, &fromAddrLen); 
    if(numBytes < 0) 
     printf("The requested resource does not exist.\n"); 
    else 
     printf("the webpage exist :)\n"); 

Я хочу, чтобы проверить, существуют ли запрошенная страница или нет. Но даже если страница не существует, сообщение статуса часто отправляется с сервера (что-то вроде «404 не найдено»). Это все еще некоторые данные, поэтому я не могу получить numBytes < 0.

Как проверить статус ответа, чтобы проверить наличие страницы?

+0

Я думаю, что 'recvfrom()' для UDP. Однако HTTP использует TCP. – ThiefMaster

+0

'recvfrom()' может использоваться с TCP, хотя это не обычная практика. –

ответ

3

Ну, вам нужно прочитать первую строку ответа и извлечь код состояния. Если это код 4xx или 5xx, что-то пошло не так (404 = Not Found, 403 = Access Denied).

+0

Но в этот момент вы, вероятно, должны использовать какой-то [парсер HTTP] (https://github.com/joyent/http-parser). –

+0

Является ли код статуса в заголовках или вам нужно извлечь его из тела страницы? Некоторые люди становятся довольно творческими с их 404 страницами ... – Gary

+1

@Gary Это в первой строке ответа, перед заголовками. –

0

Проверка на numBytes < 0 позволяет определить, существует ли фатальная ошибка TCP, например, сбой соединения. Чтобы узнать, существует ли страница, вам необходимо реализовать часть протокола HTTP. Я рекомендую вам использовать библиотеку, такую ​​как libcurl или libwww.

+0

Я не буду использовать библиотеки. это назначение :) –

+0

Затем вы должны написать свой собственный парсер HTTP, по крайней мере частично, поэтому вам следует прочитать RFC 2616 (http://www.ietf.org/rfc/rfc2616.txt), который определяет, как HTTP работает. –

Смежные вопросы