Форум: "Сети";
Текущий архив: 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.066 c