Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.18;
Скачать: CL | DM;

Вниз

Получение данных от формы 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
15-1192097399
TUser
2007-10-11 14:09
2007.11.18
Американский капитализм пал


15-1192546272
oldman
2007-10-16 18:51
2007.11.18
Еще один вопрос по русскому.


2-1193397273
vr-online
2007-10-26 15:14
2007.11.18
StringGrid. bmp в определенной ячейки.


2-1193024018
San1712
2007-10-22 07:33
2007.11.18
Подскажите почему функция StringToWideChar может не работать в W


15-1192088145
Azize
2007-10-11 11:35
2007.11.18
В США запускают сеть Internet 2