Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

HTTP- запрос в Delphi, его проведение и обработка !   Найти похожие ветки 

 
BiBle   (2004-05-12 02:01) [0]

Даброго всем времени суток!
Беспокоит меня тема проведения хттп запроса, получения данных с сервера и дальнейшая их обработка.Так, что прошу всех обладающих информацией по данномо поводу, помочь мне и сотням людей имеющим аналогичный непонятки!
<?-- заранее спасибо -->


 
BiBle   (2004-05-12 02:13) [1]

разбор любого вопроса нужно начинать с теории )
----------------------------------------------------------------
HyperText Transfer Protocol (HTTP) -- это протокол высокого уровня (а именно, уровня приложений), обеспечивающий необходимую скорость передачи данных, требующуюся для распределенных информационных систем гипермедиа. HTTP используется проектом World Wide Web с 1990 года.

Практические информационные системы требуют большего, чем примитивный поиск, модификация и аннотация данных. HTTP/1.0 предоставляет открытое множество методов, которые могут быть использованы для указания целей запроса. Они построены на дисциплине ссылок, где для указания ресурса, к которому должен быть применен данный метод, используется Универсальный Идентификатор Ресурсов (Universal Resource Identifier - URI), в виде местонахождения (URL) или имени (URN). Формат сообщений сходен с форматом Internet Mail или Multipurpose Internet Mail Extensions (MIME -- Многоцелевое Расширение Почты Internet).

HTTP/1.0 используется также для коммуникаций между различными пользовательскими просмотрщиками и шлюзами, дающими гипермедиа доступ к существующим Internet протоколам, таким как SMTP, NNTP, FTP, Gopher и WAIS. HTTP/1.0 разработан, чтобы позволять таким шлюзам через proxy серверы, без какой-либо потери передавать данные с помощью упомянутых протоколов более ранних версий.

-----------------------------------------------------------------

Общая Структура
HTTP основывается на парадигме запросов/ответов. Запрашивающая программа (обычно она называется клиент) устанавливает связь с обслуживающей программой-получателем (обычно называется сервер) и посылает запрос серверу в следующей форме:

метод запроса,
URI,
версия протокола,
за которой следует MIME-подобное сообщение, содержащее управляющую информацию запроса, информацию о клиенте и, может быть, тело сообщения.
Сервер отвечает сообщением, содержащим строку статуса (включая версию протокола и код статуса - успех или ошибка), за которой следует MIME-подобное сообщение, включающее в себя информацию о сервере, метаинформацию о содержании ответа, и, вероятно, само тело ответа. Следует отметить, что одна программа может быть одновременно и клиентом и сервером. Использование этих терминов в данном тексте относится только к роли, выполняемой программой в течение данного конкретного сеанса связи, а не к общим функциям программы.
В Internet коммуникации обычно основываются на TCP/IP протоколах. Для WWW номер порта по умолчанию -- TCP:80, но также могут быть использованы и другие номера портов -- это не исключает возможности использовать HTTP в качестве протокола верхнего уровня.

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


 
Polevi ©   (2004-05-12 07:44) [2]

это вопрос или доклад ?


 
KirGus   (2004-05-12 12:46) [3]

Держи мою теорию....
----------------------

---------------------------
Hypertext Transfer Protocol
---------------------------

Общая схема запроса клиента...

пользователь оформляет свой запрос а виде URL.
Единый локатор ресурса URL (Uniform Resource Locator)
-это цепочка символов однозначно определяющая положение
некоторого ресурса в сети и запрос клиента к этому ресурсу .
В общем случае URL состоит из следующих частей – на примере
такого URL:

http://www.TSite.com/art/gallery.dll/mammals?animal=dog&color=dlack
-------------------------------------------------------------------

http- определяет протокол передачи данных; здесь допускается
указание протоколов http, ftp и др.

www.TSite.com- сетевое имя машины, на которой расположен
WEB-сервер

art/gallery.dll –имя WEB-приложения , которому адресуется
запрос клиента;


mammals- условное имя запроса (одно и то же WEB-приложение
может обрабатывать
несколько запросов клиента);

animal=dog&color=dlack –параметры запроса (соседние параметры
разделяются символом &).

Работ браузера при передачи запроса
-----------------------------------

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

GET /art/gallery.dll/mammals?animal=dog&color=dlack
Connection: Keep-Alive
User-Agent: Mozilla/30.0bGold (WinNT;I)
Host: www.TSite.com:1024
Accept: image/gif,image/x-xbitmap,imaeg/jpeg,image/pjpeg,*/*

В первой строчке помимо инфомации о запросе указывается также
метод (GET) и протокол (HTTP/1.0), который собирается использовать
браузер для связи с ресурсом.

Вторая строка указывает, что соединение с ресурсом будет активным
до тех пор, пока ресурс не обработает клиентский  запрос.

В третьей строке проводится информация о браузере клиента и
операционном окружении.

В четвертой строке указывается сетевое имя машины, на которой
располагается нужный ресурс, и ее порт связи.

В пятой строке перечисляются медиа-компоненты, которые WEB-приложение
может поместить в свой ответ.

Работа WEB-сервера при обработки запроса
-----------------------------------------

Получив запрос клиентского браузера,WEB-сервер отыскивает нужное
WEB-приложение, активизирует его и передает ему параметры запроса.
В зависимости от формата приложения параметры запроса передаются
ему непосредственно в переменных окружения (ISAPI/NSAPI), в
стандартном потоке ввода (CGI) или в файлах (WinCGI).

Во всех случаях сервер ожидает конца работы WEb-приложения и передает
сформированный им ответ браузеру.

Фароноф (с)


 
BiBle   (2004-05-12 12:51) [4]

Конечно огромное спасибо за теорию, но я пешу чекер для мыл, и мне нужно све-таки по-больше практических аспектов дела, если кто может дайте совет....!


 
BiBle   (2004-05-24 04:06) [5]

Слышал, что была программа типо HTTPDemo в проектах Delphi6, задаче ее простозаписывать логи переговора похттп протоколу.
-----
Ребята, ПОМОГИТЕ, написать такую на 7 Дельфе, оч нуда...


 
SammIk ©   (2004-05-24 06:49) [6]

Исчи в rfc


 
loH   (2004-05-28 00:28) [7]

извините меня за столь ГЛУПЫЙ ВОПРОС, но я понятия не имею, как искать в rfc, плиз, помогите чайнику в этом вопросе...
---
мне это оч нужно, по тому, как я часто видел , как ссылаются на это самое rcf
---
зарание благодарен...!!!


 
MegaUser   (2004-05-28 07:07) [8]

короче вот что те нада изучить:
http://www.apache.org/
Тама качаешь исходники Apache web server и начинаешь в них ковыряться.... =))))))))))))))


 
KirGus   (2004-05-31 02:48) [9]

MegaUser, ага нашел, что чайнику посоветовать....)


 
Piter ©   (2004-05-31 03:34) [10]

вот моя версия:

Коннектишься к хосту (да хотя бы обычным TClientSocket), выдранному из URL по определенному порту (зачастую 80) и передаешь комманды, ждешь ответа. Вот например перехват трафика для этого сайта при запросе страниц.
Это посылается серверу после коннекта:

GET http://delphimaster.net/view/15-1074376310/
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
Accept-Language: ru
Cookie: small_thread=0; delphi_name=[ИМЯ]; delphi_email=; id=[тут должно быть нечто]; lg=[тут должно быть нечто]; ChatColor=EF4F78
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; MyIE2)
Host: www.delphimaster.ru
Proxy-Connection: Keep-Alive


Соответственно

1) GET <имя странички которую хочу>. Тут все понятно
2) Accept <bla-bla> это вроде того, что ты готов принять. Можешь писать здесь все подряд, мол готов принять все :)
3) Accept-Language: ru - сообщаешь свой язык. Теоретически сервер может выдавать разныую инфу для разных языков. Но по-моему, это не используется. Или очень редко
4) Cookie: <bla-bla> - сообщаешь свои куки для этого сайта. Это чтобы в поле ответа в "Ваше имя" сервер подставил что надо.
Подозреваю, что id и lg используется, чтобы не вводить пароль каждый раз.
5) User-Agent: <bla-bla> - пишешь какая программа посылает запрос (тут броузер пишет свою идентификацию, Опера например нетскейпом может прикинуться). Опять же теоретически сервер может выдавать разную инфу для разныз броузеров, но это редко используется.
6) Host: www.delphimaster.ru - хост, куда коннектился. По-моему, можно и не указывать, мало кто использует данную информацию
7) Proxy-Connection: Keep-Alive - чтобы прокси (если через нее соединение идет) не кешировала данный запрос.
В общем то и все.
А, вспомнил! После GET"а ты должен послать код перевода строки (в Delphi это #13#10). После запроса должен послать два кода перевода строки. После чего ждешь ответа.

А вот пример ответа:

HTTP/1.1 200 OK
|перевод строки|
Via: 1.0 MAIL
Proxy-Connection: Keep-Alive
Content-Length: 12479
Content-Type: text/html; charset=windows-1251
Server: 0W/0.6d
Date: Tue, 12 Aug 2003 18:01:08 GMT
charset: windows-1251

|двойной перевод строки>|

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<TITLE>Мастера DELPHI
.....
<и дальше пошел текст странички>


Ну тут понятно. "HTTP/1.1 200 OK" - означает что сервер обработал успешно запрос и сча тебе инфа посыпится :)
После этого идет код перевода строки.
Via: 1.0 MAIL - не знаю что это. Может, McSimm разъяснит
Content-Length: 12479 - длина самого текста странички, которая будет выдана.
charset=windows-1251 - кодирвока выдаваемой страницы
Ну остальное и так понятно
После заголовка идет код перевода строки (или два - не помню).

После чего посылается непосредственно текст страницы. Размер этого текста будет как раз равен Content-Length

Еще сервер может тебе выдать информацию архивированную, он об этом сообщит в заголовке параметром gzip. Это если ты попросишь.

---------------------------------------------------------------------------------------------------------------

А вот насчет поста, смотри пример:

POST http://www.beeonline.ru/servlet/send/sms/ HTTP/1.0
Accept-Language: ru,ja;q=0.5
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.7 [en] (Win95; I)
Referer: http://BeeOnLine-Express
Host: www.beeonline.ru
Content-Length: 91

[ПАРМЕТРЫ]


Указываешь имя апплета, http://www.beeonline.ru/servlet/send/sms/
для этого форума будет http://www.delphimaster.ru/cgi-bin/forum.pl

После заголовка двойной перевод строки и идут параметры запроса.

Допустим нужно передать параметры name, email.
Ты хочешь передать их значения "Undert" и "noemail@noemail.com" соответственно.

Тогда вместо [ПАРМЕТРЫ] будет

name=undert&email=noemail@noemail.com

Никаких кавычек. Разделение между параметрами "&"

допустим, для ответа на вопрос в этом форуме надо передать параметры апплету http://www.delphimaster.ru/cgi-bin/forum.pl такие:

name, email, text, n, id

(может еще чего надо, все это можно посмотреть в исходном коде HTML этой страницы).

Да, еще один пункт, нельзя передавать значение параметров по русски. Ты наверное видел как они выглядят, типа "%CC%E0%F1%F2%E5%F0%E0+%C4%E5%EB%FC%F4%E8" - это означает "Мастера Дельфи"

Для перевода русского текста в нужные символы используй:

function EncodeContent(const msg : String) : String;
var
   I : Integer;
begin
   Result := "";
   for I := 1 to Length(msg) do begin
       if msg[I] = " " then
           Result := Result + "+"
       else if msg[I] in ["a".."z", "A".."Z", "0".."9"] then
           Result := Result + msg[I]
       else
           Result := Result + "%" + IntToHex(ord(msg[I]), 2);
   end;
end;


После чего можешь подставлять строку, возвращаемую этой функцией в параметр.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.152 c
1-1089147829
AndrewVolkov
2004-07-07 01:03
2004.07.25
:=nil; Free; Destroy


14-1089093136
WondeRu
2004-07-06 09:52
2004.07.25
Шутка старая, но вводит меня в тупик


14-1088411181
McZim
2004-06-28 12:26
2004.07.25
Socket


8-1084179857
Клавдия
2004-05-10 13:04
2004.07.25
как склеить в один wav файл последовательно несколько файлов?


14-1088723413
Defen
2004-07-02 03:10
2004.07.25
глубиные ошибки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский