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

Вниз

Получение данных от формы HTTPServer om   Найти похожие ветки 

 
sairus   (2007-03-09 13:46) [0]

Есть простенькая html-страничка с таким вот кодом: <form method="POST" action="script.html">
  <p><input type="text" name="text" size="20"></p>
  <p><input type="submit" value="send" name="B1"><input type="reset" value="reset" name="reset"></p>
</form>

Как мне в моем приложении, построеное на idHTTPServer, принять значение, которое было введене в тесктовое поле "text" html-странички?  Ведь код ARequestInfo.Params.Value["text"] не работает!!!

Спасибо.


 
Плохиш ©   (2007-03-09 16:37) [1]

GetEnvironmentVariable("text")


 
sairus   (2007-03-09 22:04) [2]

Простите, а больше никак...???? А то у меня ошибка Linker"а возникает... Может я неправильно использую ее, можете пример привести...
Спасибо.


 
SlymRO ©   (2007-03-12 05:11) [3]

Должно быть: IdHTTPServer1.ParseParams:=true;
и будет работать: RequestInfo.Params.Values["text"];


 
sairus   (2007-03-12 17:42) [4]

Так в том-то и дело, что не работает...
Пишу ShowMessage(RequestInfo.Params.Values["text"]);  а оно выдает пустое сообщение...

Что можно сделать?


 
sairus   (2007-03-12 18:58) [5]

о... заработало... я нашел ошибку...
Но нужна помощь...
Дело в том, что у меня мой сервер принимает еще и файлы...по-этому в обработчике события OnCreatePostStream написано  VPostStream:=TMemoryStream.Create
Если эту строчку закоментировать, то все работает... Обьясните в чем проблема и что можно сделать чтобы работало и принятие файлов, и, собственно, информацию от формы получало...
Надеюсь на помощь.
Спасибо.


 
Alexey (AZ)   (2007-03-12 21:03) [6]

Может сначала надо получить переменные а затем уже файл забирать в стрим? Насколько мне помнится такие штуки "вычитывают" перемещая данные, т.е. если в порте было, а мы оттуда перегнали в стрим (не важно куда, главное что забрали), то там где было уже не будет =)


 
sairus   (2007-03-12 22:22) [7]

так то оно так.... Только вот обрабочтик события OnCreatePostStream и OnCommaтdGet  это ведь разные... создаю место под стрим я в первом, а читаю переменную я во втором... и как можно будет знать на перед что я буду делать??? Если не создам стрим VPostStream:=TMemoryStream.Create, то тогда ARequestInfo.PostStream не будет содержать файлик, а если создам то переменную не получу... Если бы это делалось во одном обработчике-без проблем, но вот с двумя... эт уж проблема...

Если ниче не найду-как-то выкручиваться буду.... Идея конечно одна есть...


 
SlymRO ©   (2007-03-13 09:57) [8]

sairus   (12.03.07 18:58) [5]
Дело в том, что у меня мой сервер принимает еще и файлы...

Как принимает? если multipart то в инди нет стандартного метода... у меня есть...


 
sairus   (2007-03-13 16:55) [9]


> Как принимает? если multipart то в инди нет стандартного
> метода... у меня есть...
>

Спасибо, SlymRO, ты мне уже давал свой код... Я уверен что он рабочий, но я не стал разбираться, а воспользовался стандартный (он там все такие есть ;-) )... Все проверял-работает...


 
SlymRO ©   (2007-03-13 17:12) [10]

sairus   (13.03.07 16:55) [9]
Тебе многие спасибо скажут если ты свой вариант таки опубликуешь тута...


 
sairus   (2007-03-13 17:56) [11]

Все просто:
OnCreatePostStream пишем:
VPostStream:=TMemoryStream.Create

OnCommandGet:

Var PostedFile:TMemoryStream;
begin

If ARequestInfo.Document="/" Then begin
  With AResponseInfo do begin
    ContentText:=HtmlForm;
    WriteContent;
  end;
end else if ARequestInfo.Document="/upload/" then begin
  PostedFile:=TMemoryStream.Create;
  Try
    Try
      PostedFile.LoadFromStream(ARequestInfo.PostStream);
      PostedFile.SaveToFile(".\"+(DateToStr(now)+" "+TimeToStr(now)+" "+AThread.Connection.Socket.Binding.PeerIP));
      With AResponseInfo do begin
        ContentText:=HtmlForm("Upload Successful!");
        WriteContent;
      end;
    except
      With AResponseInfo do begin
        ContentText:=HTMLForm("Upload Error!");
        WriteContent;
      end;
    end;
  finally
    PostedFile.Free;
  end;
end;
end;


 
SlymRO ©   (2007-03-14 05:11) [12]

sairus   (13.03.07 17:56) [11]
Пипец...
1. Ты знал что в OnCreatePostStream этого: VPostStream:=TMemoryStream.Create можно и не делать? За тебя его сделано в дебрях инди...
2. "Это" не аплоад файла, "это" я низнаю что... Не под один стандарт "это не подходит", судя по всему в файле у тебя окажутся нераспарсеные параметры, и зачем они тебе, ведь они urlencoded :)
3. Лишняя операция, можно так: ARequestInfo.PostStream.SaveToFile(".\"+(DateToStr(now)+" "+TimeToStr(now)+" "+AThread.Connection.Socket.Binding.PeerIP));
4. С таким подходом DenialOfService сделать как 2 пальца обо.... 4.1. Файлом зафлудить сервер
4.2. Нет защиты от unbound файлов (втихаря образ DVD залить) а у тебя два мемори! стрема по 4.5GB каждый :) на клиента! а Таких умельцев может оказаться много гыгы


 
sairus   (2007-03-14 23:34) [13]

Во-первых, если бы не надо было писать-не писал бы в OnCreatePostStream. Мог-бы уделить несколько минут перед критикой, и скомпилировать проект-тогда увидел бы...
Во-вторых, файлы, которые получает сервер байт в байт одинаковые, да и работают...
Во-третьих, я программирую на с++, и пример, который привел выше просто нашел в нете, лишь для того что показать что ВСЕ ТАКИ МОЖНО принимать файлы. А то что там по вопросах безопасности не так-не мои проблемы... код-то не мой...
Так что уважаемый SlymRO, факт есть факт: файлы принимаются!!! Вот из созданием вторго стрима согласен, но без него ошибка в памяти... :(


 
SlymRO ©   (2007-03-15 06:32) [14]

1. В исходник indy глядел? Не TMemoryStream но TStringStream точно создается...
LRequestInfo.PostStream := nil;
CreatePostStream(AContext, LRequestInfo.FPostStream);
LImplicitPostStream := LRequestInfo.PostStream = nil;
try
 if LImplicitPostStream then begin
   LRequestInfo.PostStream := TIdStringStream.Create("");    {Do not Localize}
 end;

2. байт в байт одинаковые? Чем отсылал? попробуй накатать простенький хтмл для отправки файла, загрузи его в IExplorer выбери файл и нажми пост... Что пришло в сервер? Код клиента приведи... но даже без кода видно что твой клиент не сможет передать файл через нормальный прокси, т.к. твой пост не соответствует стандарту...


 
sairus   (2007-03-15 20:52) [15]

Блин, мне уже тошно тебе отвечать.... Самому слабо пример сделать.... Раз тебе говорят, что нормально файл принимает, значит нормально... именно так и делал... Все хорошо, как видишь и без твоего примера работает!!!!!!!!!!!
А то что там написано в Инди, мне все равно... оно у меня работает... Сам то можешь попробовать, а то только имеешь что языком трепать...



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

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

Наверх




Память: 0.48 MB
Время: 0.075 c
2-1193292661
FER
2007-10-25 10:11
2007.11.18
редактирование сводки файлов


15-1192398990
Petr V. Abramov
2007-10-15 01:56
2007.11.18
как запрораммировать на Delphi


2-1193155670
smartleds
2007-10-23 20:07
2007.11.18
А вот такой вопрос, Нужно нарисовать таблицу 32х16 ячеек


15-1192544948
infom
2007-10-16 18:29
2007.11.18
Star Team


15-1192190259
Cyrax
2007-10-12 15:57
2007.11.18
Дистрибьютеры, дилеры и ремонт техники в сервисных центрах...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский