Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизTIdHTTPServer, ответ для клиента при закачке файла Найти похожие ветки
← →
Свой (2007-11-23 13:36) [0]компонент TIdHTTPServer
клиен посылает запрось на файл : www.my.ru/1.zip
проверяю есть ли файл, его нету отсылаю клиенту страницу что нет файла!
НО у клиента уже запустилась программа (любой менеджер закачек и он сказиват страницу html), ТАК ВОТ как этому менеджеру закачет сообщить что файла нету (и он написал что файл отсутстыует) а потом вывести в браузер страничку????
← →
Reindeer Moss Eater © (2007-11-23 13:41) [1]проверяю есть ли файл, его нету отсылаю клиенту страницу что нет файла!
Клиент думает, что получает запрошенный ресурс
Чтобы не думал, в заголовке ответа не должно быть кода "200 OK"
Должно быть 404
← →
Свой (2007-11-23 13:50) [2]мм если не сложно приведите код, просто не совсем понял куда это загнать (404)!
← →
Reindeer Moss Eater © (2007-11-23 13:52) [3]Посмотри на список параметров передаваемых в OnCommandGet
← →
Свой (2007-11-23 14:02) [4]AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo
мне надо написать в AResponseInfo
а что не пойму
← →
Reindeer Moss Eater © (2007-11-23 14:03) [5]404 надо писать.
← →
Свой (2007-11-23 14:10) [6]дык писал
AResponseInfo.ContentText:="404";
и так
AResponseInfo.ResponseText:="404";
результат никакой
← →
Reindeer Moss Eater © (2007-11-23 14:12) [7]ResponseText - это будущий боди документа в клиенте браузера.
В твоем случае там должен быть html текст страницы "not found".
← →
Reindeer Moss Eater © (2007-11-23 14:14) [8]Кроме того, я тебе сказал, что "писать надо" 404, а не "404"
← →
Reindeer Moss Eater © (2007-11-23 14:15) [9]Первое - это число, а второе - это строка.
← →
Свой (2007-11-23 14:18) [10]не пойму что то, перегрелся видно
AResponseInfo.ResponseText:=моя страница где написано что файла нет
а как написать менеджеру что нет файла??
куда 404 написать то?
← →
Reindeer Moss Eater © (2007-11-23 14:20) [11]а что, там так дохрена мест (свойств у AResponseInfo) куда можно записать числовой код?
← →
Свой (2007-11-23 14:24) [12]AResponseInfo.ResponseNo:=404;
не помогает тоже, или есть еще куда написать? indy 9 использую
← →
Reindeer Moss Eater © (2007-11-23 14:27) [13]Сначала устанваливаем AResponseInfo.ResponseNo:=404, а потом поди страницу с приветом через ServeFile посылаем.
Ага?
← →
Свой (2007-11-23 14:34) [14]if fileexists(rez) then
begin
rez:=ExpandFileName(dir+doc);
AResponseInfo.ContentType:="application/"+zapfile;
serv.ServeFile(AThread,AResponseInfo,rez);
exit;
end
else
begin
AResponseInfo.ResponseNo:=404;
//aResponseInfo.ContentText:=pp.Content;-выключил и все равно файл он качает с текстом Internal Server Error
exit;
end;
← →
Свой (2007-11-23 14:37) [15]aResponseInfo.ContentText:=cgi.ErrorMsg; отключил
тогда файл качает пустой
← →
Reindeer Moss Eater © (2007-11-23 14:45) [16]И какой загловок ответа виден в менеджере закачек?
← →
Свой (2007-11-23 14:46) [17]т.е. при отсутствии файла пишу:
AResponseInfo.ResponseNo:=404; и все?
больше действий никаких дальше нету у меня! (пока)!
он все равно качает файл и т.д че надо еще то ему?
файл качается пустой если оставляю ErrorMsg на сервере то в файле интернал сервер еррор!
← →
Reindeer Moss Eater © (2007-11-23 14:46) [18]какой загловок ответа виден в менеджере закачек?
← →
Свой (2007-11-23 14:49) [19]запрос http://127.0.0.1/1.zip
ответ менеджера:
файл является текстовой текстовой html страницей хотите сохранить этот файл с расширением htm?
← →
Reindeer Moss Eater © (2007-11-23 14:51) [20]Тогда точить надо не сервер, а твой менеджер закачек.
Вот как ведет себя регет с твоим HTTP сервером:Info 273 14:44:59 23.11.2007 Соединяемся с localhost (127.0.0.1:90)
Output 274 14:44:59 23.11.2007 GET /test HTTP/1.0
Output 274 User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)
Output 274 Accept: */*
Output 274 Referer: http://localhost:90/
Output 274 Host: localhost:90
Input 275 14:44:59 23.11.2007 HTTP/1.1 404 BLA BLA BLA
Input 275 Connection: close
Input 275 Content-Type: text/html
Input 275 Server: Indy/9.0.18
Error 276 14:44:59 23.11.2007 Error #80070002(Не удается найти указанный файл.) in CRgHttpSession::RequestFile()
Info 277 14:44:59 23.11.2007 Пауза 5 секунд
← →
Свой (2007-11-23 14:52) [21]да запрос http://127.0.0.1/1.zip ввожу сразу в экспрорере
← →
Reindeer Moss Eater © (2007-11-23 14:53) [22]ответ менеджера:
Мне реальный заголовок ответа сервера нужен был, а не рассказы твоего менеджера что он там думает про 404 страницу.
← →
Anatoly Podgoretsky © (2007-11-23 14:59) [23]> Свой (23.11.2007 14:52:21) [21]
Какой загловок ответа?
← →
Свой (2007-11-23 15:00) [24]я не знаю!
как его посмотреть?
← →
Reindeer Moss Eater © (2007-11-23 15:05) [25][20]
← →
Свой (2007-11-23 15:08) [26]давай прогу кину на почту посмотрите ответ!
← →
Reindeer Moss Eater © (2007-11-23 15:11) [27]А что говорит ie на вводимый урл?
← →
Свой (2007-11-23 15:14) [28]ie ничего не говорит сразу закачка замускается и все и потом тоже ничего
← →
Reindeer Moss Eater © (2007-11-23 15:15) [29]Блин, выруби свой менеджер и скажи что говорит ие на этот урл!
← →
Свой (2007-11-23 15:27) [30]ИЕ говорит Internal Server Error при вырубленом менеджере
← →
Reindeer Moss Eater © (2007-11-23 15:39) [31]Все чудесатее и чудесатее.
На сервере интернал еррор, а менеджер при этом что-то умудряется оттуда высосать.
← →
Anatoly Podgoretsky © (2007-11-23 15:45) [32]> Reindeer Moss Eater (23.11.2007 15:39:31) [31]
Страницу с ошибкой 5хх.
← →
Свой (2007-11-23 15:48) [33]дык он (менеджер) этот ответ и сахраняет в виде запрашиваемого файла с расширением htm
сервер может мой че то не так отвечает?
← →
Reindeer Moss Eater © (2007-11-23 15:50) [34]твой сервер по ходу вообще упал ничего не ответив.
← →
Свой (2007-11-23 15:53) [35]может и так
запускаю под делфи и тестю
ща погляжу еще и отпишусь
← →
Anatoly Podgoretsky © (2007-11-23 15:59) [36]> Свой (23.11.2007 15:48:33) [33]
Так он и посылает ответ 5хх в html.
← →
palva © (2007-11-23 16:19) [37]Бывает, менеджер плохой. Он видит - расширение zip и сразу перехватывает, даже не удосужившись получить и проверить заголовки. У меня так было, когда я пробовал cgi программу с расширением exe. Менеджер перехватывал и начинал сохранять вэб страницу, которую выдавала CGI.
← →
Свой (2007-11-23 18:37) [38]так давайте попорядку разберем
запросили файл, отсылаем так
procedure TForm1.servCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
aResponseInfo.ContentType:="applications/zip";
serv.ServeFile(AThread, AResponseInfo, "d:\1.zip");
end;
1е где имя файла??? или как его передать?
(раз от раза вылетает то открывается файл текстом то скачавается но по имени запроса! (например 127.0.0.1 а не 1.zip)
если нет файла
procedure TForm1.servCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
aResponseInfo.ResponseNo:=404;
потом можн послать файл html содержащий что инфо о том что файла нету?
serv.ServeFile(AThread, AResponseInfo, "d:\1.html");
end;
← →
Reindeer Moss Eater © (2007-11-23 18:54) [39]Это сказка про белого бычка.
Во втором случае когда страница 404 посылается клиенту с помощью ServeFile, то метод ServeFile посылает обычный заголовок с кодом 200 (все зашибись, забирай свой ресурс)
Откуда ему знать, что это страница для отображения ошибки not found ?
Кроме того, этот же ServeFile сам управляет полем ContentType
← →
Reindeer Moss Eater © (2007-11-23 18:55) [40]Скачай уже демосы от инди.
← →
Anatoly Podgoretsky © (2007-11-23 19:01) [41]> Reindeer Moss Eater (23.11.2007 18:55:40) [40]
А поможет?
← →
Reindeer Moss Eater © (2007-11-23 19:18) [42]должно. там как раз рассматриваемый случай есть.
← →
Anatoly Podgoretsky © (2007-11-23 19:21) [43]> Reindeer Moss Eater (23.11.2007 19:18:42) [42]
Ну я же не говорил, что нет, я спрашивал, а поможет?
← →
Свой (2007-11-23 20:28) [44]скачал
с ответом там все понятно, если страницу красивую не выдавать...
а вот со скачкой там не все так хорошо не все файлы понимает (точнее расширения, рар все время зипом обзывает:)
← →
Свой (2007-11-23 20:50) [45]ответ если нет файла
AResponseInfo.ResponseNo:=404;
aResponseInfo.ContentText:="тут че угодно"; (и своя страница тоже)
вообщем IE все понимает и дает ответ в виде любой страницы
любой менеджер закачет ответ
AResponseInfo.ResponseNo:=404;
понимает но aResponseInfo.ContentText:="тут че угодно";
не дает в браузер
Reindeer Moss Eater © (23.11.07 18:54) [39]
Кроме того, этот же ServeFile сам управляет полем ContentType
плохо управляет лучше самому указать
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.049 c