Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Парсинг заголовков HTTP 
V
    Опции темы
guest20060
Дата 18.10.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Значит есть такая строка

GET /?login=guest20060&password=guest HTTP/1.1
[bla bla bla]
Accept-Language: ru
Host: 127.0.0.1:1234
Connection: Keep-Alive

все это хранится в переменной типа String с именем, предположим Buffer.

Я никак не могу написать функцию для получения параметров по имени, например

function ParamByName(Name, Buffer: String): String;
begin

end;

Нужно, чтобы, например, при использовании ParamByName('login', Buffer) функция возвращала бы guest20060.
Как это реализовать по проще? Очень надеюсь на помощь...
PM MAIL   Вверх
Matematik
Дата 18.10.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 1
Всего: 50



Для Delphi 7 (может и выше)

Код

sl:=TStringList;
sl.Text := 'Accept-Language: ru'+
'Host: 127.0.0.1:1234'+
'Connection: Keep-Alive';
sl.NameValueSeparator := ':'; // раздилитель

ShowMessage(sl.Values['Host']); // вот так получать параметр

sl.Free;

PM MAIL WWW ICQ   Вверх
guest20060
Дата 18.10.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



блин, забыл сказать, подключаемые модули
Windows.pas и Winsock.pas. Важен размер....
PM MAIL   Вверх
guest20060
Дата 19.10.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Неужели никто не поможет?
Важно понимать, что разбирать как раз нужно именно url, т. е. строку

GET /?login=guest20060&password=guest HTTP/1.1

Но передавать в функцию надо именно весь буфер....

Плз... очень надеюсь на вашу помощь...
PM MAIL   Вверх
Exception
Дата 19.10.2006, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186




 ! 
Exception
Так называть темы нельзя! Тема предложена к удалению модераторами. У Вас есть 24 часа, чтобы придумать название в соответствии с правилами. С уважением, модераторы раздела.

PM   Вверх
guest20060
Дата 19.10.2006, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Название темы: "Как разобрать параметры HTTP заголовка?"

Неужели за этим дело встало?
PM MAIL   Вверх
Exception
Дата 19.10.2006, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



А ещё раз правила почитать? Те, что сверху страницы. Один раз переименую сам, но в следующий сразу удалю. Да, за этим встало дело, потому что надоело каждого третьего заставлять взглянуть на правила перед созданием темы; неужели, это так сложно?
PM   Вверх
guest20060
Дата 19.10.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



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

А теперь по теме... Мне удалось найти некоторые функции, однако пристрочить к своему примеру у меня не получается. Может быть у кого-нибудь удастся это сделать? Очень надеюсь на помощь.

Код

procedure InitParams;
var 
 SS: string; 
begin 
 SetLength(SS,10000); 
 GetEnvironmentVariable('QUERY_STRING',@SS[1],2000); 
 InParams:=PChar(@SS[1]); 
end;

function ParamByName(Name: string): string;
var 
 SS, ST: string; 
 K: integer; 
begin 
 Result:='';
 SS:=InParams; 
 while Length(SS)<>0 do 
  begin 
   K:=Pos('&',SS); 
   if(K<>0) then 
    begin 
     ST:=Copy(SS,1,K-1); 
     SS:=Copy(SS,K+1,10000); 
    end 
   else 
    begin 
     ST:=SS; 
     SS:=''; 
    end; 
   K:=Pos('=',ST); 
   if(K<>0) then 
    begin 
     if(Name=Copy(ST,1,K-1)) then 
      begin 
       Result:=Decode(Copy(ST,K+1,6000)); 
      end; 
    end; 
  end; 
end;


Это сообщение отредактировал(а) alexeis1 - 19.10.2006, 16:15
PM MAIL   Вверх
guest20060
Дата 19.10.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Все. Сам переписал функцию. Оказалось совсем не сложно, удивляюсь почему HTTP протокол такой корявый? Настолько неудобно с ним работать... Спасибо всем...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.