Вы здесь

Вопрос о HTTP запросах (язык С)

Доброго времени суток!
Господа есть такое.




kolia88@tux ~ $ cc testegg.c -o test -Wall
kolia88@tux ~ $ ./test --connect ya.ru 80
1
ya.ru
GET / HTTP/1.1
Host: ya.ru
User-Agent:Mozilla/5.0(X11;Linuxx86_64;en,ru;rv:17.0)Gecko/20100101Firefox/17.0
Accept:text/html,application/json,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*;q=0.1
Accept-Language:ru;q=0.50
Accept-Encoding:gzip,deflate,compress;q=0.9
Accept-Charset:ISO-8859-1,utf-8;q=0.66,*;q=0.66
Connection:close


2
3
77.88.21.3:204804
7

8
HTTP/1.1 200 Ok
Server: nginx
Date: Sun, 23 Dec 2012 14:13:43 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Cache-Control: no-cache,no-store,max-age=0,must-revalidate
Expires: Sun, 23 Dec 2012 14:13:43 GMT
Last-Modified: Sun, 23 Dec 2012 14:13:43 GMT
P3P: policyref="/w3c/p3p.xml", CP="NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI"
Set-Cookie: yandexuid=30381468813562720
200
kolia88@tux ~ $ 

Вопрос, как сделать так чтобы возвращалась страница, что я делаю не так(в этом деле новичок)прошу кто может дайте совет почему нет страниц.

Форум: 

Залезть в код curl

—

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Хм, Зачем лесть в код curl?
Решение же должно быть ни сколько не сложным...

kolia88@tux ~ $ ./test --connect ubuntuforums.org/index.php?topic=209856.0 80
1
ubuntuforums.org/index.php?topic=209856.0
GET /index.php?topic=209856.0 HTTP/1.1 
Host: ubuntuforums.org
User-Agent:Mozilla/5.0(X11;Linuxx86_64;en,ru;rv:17.0)Gecko/20100101Firefox/17.0
Accept:text/html,application/json,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*;q=0.1
Accept-Language:ru;q=0.50
Accept-Encoding:gzip,deflate,compress;q=0.9
Accept-Charset:ISO-8859-1,utf-8;q=0.66,*;q=0.66
Connection:close


2
3
91.189.94.12:204804
7

8
HTTP/1.1 200 OK
Date: Sun, 23 Dec 2012 16:32:14 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.3.10-1ubuntu3.4
Expires: 0
Cache-Control: private, post-check=0, pre-check=0, max-age=0
Pragma: no-cache
X-UA-Compatible: IE=7
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: bbsessionhash=b2140879f79a472dad1ca1cbc49684b0; path=/; domain=.ubuntuforums.org; HttpOnly
Set-Cookie: bblastvisit=1356280334; expires=Mon, 23-Dec-2013 16:32:14 GMT; path=
200

http://bpaste.net/show/66152/

Проделал манипуляции с пробелами вот что получается http://bpaste.net/show/66155/

и выводит вот что

kolia88@tux ~ $ ./test --connect www.google.com 80
1
www.google.com
GET / HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0(X11;Linuxx86_64;en,ru;rv:17.0)Gecko/20100101Firefox/17.0
Accept: text/html,application/json,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*;q=0.1
Accept-Language: ru;q=0.50
Accept-Encoding: gzip,deflate,compress;q=0.9
Accept-Charset: ISO-8859-1,utf-8;q=0.66,*;q=0.66
Connection: close


2
3
74.125.143.106:204804
7

8
HTTP/1.1 302 Found
Location: http://www.google.ru/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=b9523039ab7c02b7:FF=0:TM=1356281466:LM=1356281466:S=42AHZ_Qu8mtESjDa; expires=Tue, 23-Dec-2014 16:51:06 GMT; path=/; domain=.google.com
Set-Cookie: NID=67=Mv6ZbTppsGUC9L5s7Ot78rvJvitmuBvRiLXhtAQdsfLqZQsj0IUGDF8QGp3Jc6YHXK66wdEA-ZTt8kNcGt9RYNrMar59ZB0mdihqshYgg8leR3gsl73JMJbCgCLiBUae; expires=Mon, 24-Jun-201
302
kolia88@tux ~ $ ./test --connect ru.wikipedia.org 80
1
ru.wikipedia.org
GET / HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0(X11;Linuxx86_64;en,ru;rv:17.0)Gecko/20100101Firefox/17.0
Accept: text/html,application/json,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*;q=0.1
Accept-Language: ru;q=0.50
Accept-Encoding: gzip,deflate,compress;q=0.9
Accept-Charset: ISO-8859-1,utf-8;q=0.66,*;q=0.66
Connection: close


2
3
91.198.174.225:204804
7

8
HTTP/1.0 301 Moved Permanently
Date: Sun, 23 Dec 2012 16:39:36 GMT
Server: Apache
X-Content-Type-Options: nosniff
Cache-Control: s-maxage=1200, must-revalidate, max-age=0
Vary: Accept-Encoding,X-Forwarded-Proto,Cookie
Last-Modified: Sun, 23 Dec 2012 16:39:36 GMT
Location: http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
Content-Encoding: gzip
Content-Le
301

kolia88@tux ~ $ ./test --connect ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 80
1
ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
GET /wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0(X11;Linuxx86_64;en,ru;rv:17.0)Gecko/20100101Firefox/17.0
Accept: text/html,application/json,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*;q=0.1
Accept-Language: ru;q=0.50
Accept-Encoding: gzip,deflate,compress;q=0.9
Accept-Charset: ISO-8859-1,utf-8;q=0.66,*;q=0.66
Connection: close


2
3
91.198.174.225:204804
7

8
HTTP/1.0 200 OK
X-Content-Type-Options: nosniff
Content-Language: ru
Content-Encoding: gzip
Content-Length: 24547
Server: Apache
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
Vary: Accept-Encoding,Cookie
Date: Sun, 23 Dec 2012 16:53:49 GMT
Content-Type: text/html; charset=UTF-8
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Last-Modified: Sun, 23 Dec 2012 14:05:15 GMT
X-Cache: HIT from amssq41.esams.wikimedia.org
X-Cache-Lookup: HIT from amssq41.esams.wikimedia.org:3128
Age: 76
X-Cache: HIT from amssq37.esams.wikimedia.org
X-
200

и это все подскажите кому не сложно в чем вся соль

Не знаю как собрана программа ./test в вашем примере, и какие параметры она может принимать, но то, что запрашиивается у сервера только заголовок веб-страницы - очевидный факт!
Пример запроса заголовка и тела веб-страницы на языке newLISP, выглядит так.

Здесь я явно запрашиваю заголовок веб-страницы (параметр header):

> (get-url "http://ya.ru" "header")
"Server: nginx\r\nDate: Tue, 25 Dec 2012 01:51:51 GMT\r\nContent-Type: text/html; charset=UTF-8\r\nConnection: close\r\nCache-Control: no-cache,no-store,max-age=0,must-revalidate\r\nContent-Length: 5019\r\nExpires: Tue, 25 Dec 2012 01:51:51 GMT\r\nLast-Modified: Tue, 25 Dec 2012 01:51:51 GMT\r\nP3P: policyref=\"/w3c/p3p.xml\", CP=\"NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI\"\r\nSet-Cookie: yandexuid=9042457571356400311; Expires=Fri, 23-Dec-2022 01:51:51 GMT; Domain=.ya.ru; Path=/\r\nX-Frame-Options: DENY\r\nXX-XRDS-Location: http://openid.yandex.ru/server_xrds/\r\n\r\n"

А теперь я запрашиваю тело веб-страницы:

> (get-url "http://ya.ru")
[text]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Яндекс</title>
...
Здесь много кода страницы...
...
<img src="//mc.yandex.ru/watch/723233"style="position:absolute; margin-top: -10px;"alt=""/></body></html>[/text]

На всякий случай обратите внимание на тот факт, что заголовок и тело веб-страницы отделяются двумя пустыми строками. Это ясно видно в конце моего первого примера:

XX-XRDS-Location: http://openid.yandex.ru/server_xrds/\r\n\r\n

То есть клиент (в данном случае ваша программа), должен интерпретировать все поступающие от сервера данные как заголовок веб-страницы до тех пор, пока не встретит идущие подряд две пустые строки.

—

Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...

Автор отправляется читать спецификации протокола HTTP, в частности, запросы HEAD и GET. У ТС идет запрос GET - он возвращает либо страницу, либо ошибку, либо перенаправление. Он не может вернуть ТОЛЬКО ЗАГОЛОВКИ.

Автор темы - запусти-ка telnet ya.ru 80, набери в нем GET http://ya.ru/ HTTP/1.0 и посмотри. Вот твои ошибки:

1. строка запроса GET не может быть пустой - это даст ошибку 400 (bad request)
2. не все веб-сервера согласны принимать запросы по HTTP/1.1 - попробуй 1.0
3. пойди от простого - напиши работающую программулю, которая тупо заберет веб-страницу корректно, потом усложняй ее всякими заголовками типа host/cookie и т.д.

—

Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"

Tzar написал:
Автор отправляется читать спецификации протокола HTTP, в частности, запросы HEAD и GET. У ТС идет запрос GET - он возвращает либо страницу, либо ошибку, либо перенаправление. Он не может вернуть ТОЛЬКО ЗАГОЛОВКИ.

Спасибо, обязательно при случае почитаю.

К стати. Перенаправление достигается отправкой клиенту строки вида "Location: нужный_url\r\n\r\n", то есть фактически только один заголовок, без тела веб-страницы.

—

Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...

kesha написал:
К стати. Перенаправление достигается отправкой клиенту строки вида "Location: нужный_url\r\n\r\n", то есть фактически только один заголовок, без тела веб-страницы.

1. Кстати пишется слитно.
2. Я же дал совет - отправляемся ЧИТАТЬ СПЕЦИФИКАЦИЮ ПРОТОКОЛА. А точнее, коды 301, 302, 303 (moved permanently, moved temporarily, see other)

После Location кстати вполне может идти тело страницы, но браузер, обработав Location, не будет парсить тело.

—

Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"

Tzar написал:
...
1. Кстати пишется слитно.
...

И за это спасибо, буду знать :-)

—

Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...

На том и сойдемся )))

—

Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"

Вот теперь что возращает яндекс)
http://bpaste.net/show/66595/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Яндекс</title><link rel="shortcut icon"href="http://yandex.st/lego/_/pDu9OWAQ��rKB0s2J9IojKpiS_Eho.ico"><link rel=search href="http://yandex.ru/opensearch.xml"title="Яндекс"type="application/opensearchdescription+xml"><base target="_top"><link rel="stylesheet"href="//yandex.st/www/1.414/yaru/pages/index/_index.css"/><script type="text/javascript">(function(b){var a="";b.Detector=(function(){var g=function(){var i=document.documentElement.st��ryle;return typeof i.borderRadius==="string"||typeof i.WebkitBorderRadius==="string"||typeof i.KhtmlBorderRadius==="string"||typeof i.MozBorderRadius==="string"};var f=function(j){var i=new Image();i.onload=i.onerror=function(){j(this.width===1&&this.height===1)};i.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="};var e=function(){var i=false;try{i=!!new b.ActiveXObject("htmlfile")}catch(j){i=false}return i};var d=function(){return b.navigator&&b.navigator.platform==="Win64"};var c=function(){return b.innerWidth&&b.screen&&b.screen.width&&b.screen.height&&b.innerHeight&&(b.innerWidth===screen.width&&window.innerHeight===screen.height)}��r;var h=function(){return c()&&d()&&!e()};return{isBorderRadiusSupported:g(),checkDataURLSupport:f,isIEMetroMode:h()}})();a+=" js";a+=Detector.isBorderRadiusSupported?" m-border-radius":" m-no-border-radius";if(Detector.isIEMetroMode){a+=" m-ie10-metro"}Detector.checkDataURLSupport(function(c){if(!c){a+=" no-data-url"}});if(b.device){a+=" m-touch"}if(b.document&&b.docu��rment.documentElement){b.document.documentElement.className+=a}})(this);</script><script type="text/javascript"></script></head><body><i class="b-tns"></i><table cellpadding="0"cellspacing="0"><tbody><tr><td colspan="2"valign="top"height="1"><ul id="head"><li class="gap-left"><i></i></li><li class="s"><a id="sethome"href="http://help.yandex.ru/start/" onmousedown="c(th��ris,17,1755);">Сделать стартовой</a></li><li class="gap-right"><i></i></li><li id="mail"><a href="http://mail.yandex.ru"onclick="c(this,17,1080)">Войти в почту</a></li></ul></td></tr><tr><td colspan="2"align="center"><form action="http://yandex.ru/yandsearch"style="position:relative;z-index:1;"><table class="b-search i-bem"onclick="return{'b-search':{}}"><tbody><tr><td><a href="http://www.yandex.ru" onclick="c(this,17,1081)"><img src="//yandex.st/www/1.414/yaru/i/logo.png"alt="Яндекс"width="100"border="0"height="44"></a></td><td class="b-text"><div class="b-search__input"><span class="b-form-input b-form-input_size_l b-f��rorm-input_type_autofocus i-bem  b-form-input_autocomplete_yes b-form-input_suggest_yes b-form-input_tap-ahead_yes" onclick="return {'b\-form\-input':{ 'name':'b\-form\-input', 'dataprovider':{url:'http:\/\/suggest.yandex.ru\/suggest-ya.cgi?v=4&fact=1&wiz=TrWth&callback=?',version:4}, 'suggestType':'morda_ru', 'popupMods':{'size':'l','suggest':'yes'}}}"><sp��ran class="b-form-input__box"><input name="text"class="b-form-input__input"id="text"maxlength="400"/></span></span></div></td><td><div class="b-search__button"><span onclick="return {'b\-form\-button':{name:'b\-form\-button'}}"class="b-form-button b-form-button_theme_grey-arrow-no-transparent-l b-form-button_size_l i-bem" style="margin-top: -2px" role="button"><i class��r="b-form-button__left"></i><span class="b-form-button__content"><span class="b-form-button__text">Найти</span></span><input type="submit"onclick="c(this,17,1082)"value=""class="b-form-button__input"/></span></div></td></tr></tbody></table></form></td></tr><tr valign="bottom"><td colspan="2"height="1"class="copy"><div class="copy-wrap"><p class="left"><span>© 1997—2012</span> «<a href="http://www.yandex.ru" onclick="c(this,17,1083)">Яндекс</a>»</p><p class="right">Дизайн — <a href="http://www.artlebedev.ru" onclick="c(this,17,1084)">Студия Артемия Лебедева</a></p><div class="b-adv"><a href="http://brow��rser.yandex.ru"terget="_blank">Новый Яндекс.Браузер</a></div></div></td></tr></tbody></table><!--[if lte IE 7]><script>try{document.domain = "ya.ru";}catch(e){}</script><![endif]--><script src="//yandex.st/jquery/1.6.3/jquery.min.js"type="text/javascript"></script><script src="//yandex.st/www/1.414/yaru/pages/index/_index.js"type="text/javascript"></s��rcript><script></script><script>Lego.init({login:"", locale:"ru", 'lang-zone':"ru"}); setTimeout(function() { createElement('script', { type: 'text/javascript', charset:'UTF-8', src: 'http://www.yandex.ru/data/mail.js?yaru=y' }, function(){ if (window.regionID){ $('<input name="lr"type="hidden">') .val(window.regionID) .appendTo($('form')); } }); }, 42);</script><ifram��re frameBorder="0"src="http://kiks.yandex.ru/su/"style="width:40px;height:40px;overflow:hidden;position:absolute;left:-40px;top:0;opacity:0"></iframe><img src="//mc.yandex.ru/watch/723233"style="position:absolute; margin-top: -10px;"alt=""/></body></html>

Ставлю прописываю а оно вываливается, каким лучше пользоваться и где можно почитать об этом кто может подсказать? Использую gentoo язык Си естессно

1 вопрос - 1 тема. Читай FAQ

—

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)