2016-11-09 2 views
0

Я пытаюсь реализовать простой веб-браузер в C. Когда я когда-либо отправить запрос на google.com ПОЛУЧИТЬ используяGET запрос Google

GET/HTTP/1.1\r\n\r\n 

Я получаю

HTTP/1.1 302 Found 
Cache-Control: private 
Content-Type: text/html; charset=UTF-8 
Location: http://www.google.co.in/?gfe_rd=cr&ei=1wIjWPqZA6DmugSY4I-IDw 
Content-Length: 261 
Date: Wed, 09 Nov 2016 11:04:55 GMT 

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>302 Moved</TITLE></HEAD><BODY> 
<H1>302 Moved</H1> 
The document has moved 
<A HREF="http://www.google.co.in/?gfe_rd=cr&amp;ei=1wIjWPqZA6DmugSY4I-IDw">here</A>. 
</BODY></HTML> 

Впоследствии я отправьте другой запрос GET

GET /?gfe_rd=cr&amp;ei=1wIjWPqZA6DmugSY4I-IDw HTTP/1.1\r\n\r\n 

И код ошибки 404 не найден.

Если это не так, то каким должен быть запрос GET перенаправить меня на сайт. Я нахожу IP-адрес Google, используя

char *hostname = "www.google.com"; 
struct hostent *he; 
he = gethostbyname(hostname); 
+0

Я думаю, вам нужно решить ip-адрес 'www.google.co.in' для второго запроса. – user694733

+0

Это тоже не работает. Продолжает отвечать. Этот документ был ПЕРЕМЕЩЕН – kaiser

ответ

1

Вы запрашиваете неправильный URL.

Присмотритесь на URL, указанному в заголовке Location:

http://www.google.co.in/?gfe_rd=cr&ei=1wIjWPqZA6DmugSY4I-IDw 

и URL в источнике HTML:

http://www.google.co.in/?gfe_rd=cr&amp;ei=1wIjWPqZA6DmugSY4I-IDw 

Вы заметите, что второй из них немного разные, поскольку амперсанды должны быть закодированы как &amp; в документах HTML.

Если вы используете URL-адрес в заголовке Location, у вас будет больше шансов на успех. Однако у вас могут быть проблемы, если поведение сервера зависит от других факторов. Например, многие веб-сайты будут отклонять запросы без узнаваемого заголовка запроса User-Agent.

+0

Хорошо, я вижу вашу логику, я попытался изменить & на &, но все равно это не сработало. Вероятно, мой User-Agent не определен, почему он не работает. – kaiser

+0

@kaiser Вы также должны рассмотреть возможность отправки других заголовков, таких как 'Referer' и' Accept'. Чем больше ваш код ведет себя как обычный браузер, тем лучше ваши шансы получить действительный ответ. –