Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

IdHTTPProxyServer выдача файла с локального диска

386
10 ноября 2009 года
newcss
297 / / 05.04.2005
Добрый вечер.
В роли прокси использую IdHTTPProxyServer, картинки записываю на диск без проблем.
А вот выдавать их с локального компьютера не очень получается =(.
Может кто сталкивался с такой проблемой?

Код:
void __fastcall TForm1::IdHTTPProxyServer1BeforeCommandHandler(TIdCmdTCPServer *ASender,
          UnicodeString &AData, TIdContext *AContext)
{
   ...
   ...
 if(type_file==".gif"|| type_file==".png"|| type_file==".jpg")
 {

    if(FileExists(file_patch))
   {

     file_patch = Replace(file_patch,"\\","/");
     AData = "FILE "+file_patch+" HTTP/1.1";
     Memo1->Lines->Add("Файл из кеша");
     Memo1->Lines->Add(AData);
   }
}
   
}


Пример:

Файл из кеша
FILE C:/prog_c/proxy/Debug/images/img1.gif HTTP/1.1

Может его как-то по другому выдавать нужно? В папке данный файл существует...
14
11 ноября 2009 года
Phodopus
3.3K / / 19.06.2008
Ммм.. Вы вместо содержимого картинки отдаете ее путь на прокси-сервере чтоли?! :eek:
386
11 ноября 2009 года
newcss
297 / / 05.04.2005
AData изначально имеет вид
GET http://www.SITE.ru/images/img1.gif HTTP/1.1
по логике вещей меняю путь на свой локальный... ГЕТ, заменяю на FILE
14
12 ноября 2009 года
Phodopus
3.3K / / 19.06.2008
Почитайте RFC по HTTP
386
12 ноября 2009 года
newcss
297 / / 05.04.2005
Цитата: Phodopus
Почитайте RFC по HTTP


RFC 2616 HTTP - там описано как работать с сервером...
На компьютере локальном нет сервера, и я не вижу в нем смысла.
Задача стоит - выдать документ с локального диска, а не из интернета...

14
12 ноября 2009 года
Phodopus
3.3K / / 19.06.2008
А что вы думаете представляет из себя IdHTTPProxyServer?
И вообще откуда такая команда взялась - FILE? Я помню только GET, POST и HEAD.
386
12 ноября 2009 года
newcss
297 / / 05.04.2005
FILE - таково было решение на соседнем форуме, правда в ПАСКЛЬ вариации). Там прилагался и соотвествующий IdHTTPProxyServer.pas.
Сейчас детально его изучил. И реализовал по своему).
Вообщем кому интересно решение:
Код:
void __fastcall TForm1::IdHTTPProxyServer1BeforeCommandHandler(TIdCmdTCPServer *ASender,
          UnicodeString &AData, TIdContext *AContext)
{


//существует ли файл на диске?
    if(FileExists(file_patch))
   {
     //если существует, тогда загружаем с диска
     AContext->Connection->IOHandler->WriteFile(file_patch);
     //разрываем соединение
     AContext->Connection->Disconnect();
     Memo1->Lines->Add("Файл из кеша");
     Memo1->Lines->Add(file_patch);
   }
 
}
14
12 ноября 2009 года
Phodopus
3.3K / / 19.06.2008
А на этом форуме мы догадаться были об этом должны?
Раз уж там такое решение там бы и спрашивали...
386
12 ноября 2009 года
newcss
297 / / 05.04.2005
А давайте без разведения демогогии о том где лучше спрашивать...
Вопрос был по существу, и уверен достаточно многим интересный.
Логично было предположить - что нужно каким-то образом нужно запретить загрузку файла из интернета, а загрузить его в поток. В этом и заключался вопрос, как это сделать...
47K
22 апреля 2010 года
QenT
1 / / 01.02.2009
Цитата: newcss
FILE - таково было решение на соседнем форуме, правда в ПАСКЛЬ вариации). Там прилагался и соотвествующий IdHTTPProxyServer.pas.
Сейчас детально его изучил. И реализовал по своему).
Вообщем кому интересно решение:
Код:
void __fastcall TForm1::IdHTTPProxyServer1BeforeCommandHandler(TIdCmdTCPServer *ASender,
          UnicodeString &AData, TIdContext *AContext)
{


//существует ли файл на диске?
    if(FileExists(file_patch))
   {
     //если существует, тогда загружаем с диска
     AContext->Connection->IOHandler->WriteFile(file_patch);
     //разрываем соединение
     AContext->Connection->Disconnect();
     Memo1->Lines->Add("Файл из кеша");
     Memo1->Lines->Add(file_patch);
   }
 
}


напиши плизз, откуда берешь file_patch и как узнаешь тип файла)

253
22 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: newcss
А давайте без разведения демогогии о том где лучше спрашивать...
Вопрос был по существу, и уверен достаточно многим интересный.
Логично было предположить - что нужно каким-то образом нужно запретить загрузку файла из интернета, а загрузить его в поток. В этом и заключался вопрос, как это сделать...


1. Phodopus прав по поводу FILE - я на 100% уверен, что там никакой путь передаваться не должен. Подумайте сами, на кой он сдался клиенту, который находится вообще на другой машине? То, что у вас и клиент, и сервер в одном месте - скорее исключение. В этом свете решение "с другого форума" мне представляется правильным.
2. Подозреваю, что file_patch на самом деле должен называться file_path...
3. Дабы понять, что не так с передаваемым файлом, добавьте перед
AContext->Connection->IOHandler->WriteFile(file_patch);
запись этого файла куда-нибудь в c:\tmp.tmp и потом посмотрите, что туда на самом деле записалось.
4. Ну, и проверьте, что у вас реально находися в file_path и file_type (MessageBox'ом или дебаггером, например).

Расширить 3-й пункт можно ещё так: создайте тестовый проект с клиентом, который будет просто принимать всё и записывать (dump) куда-то во временный файл. А вы потом откроете этот лог в хекс-редакторе и посмотрите, что там вам сервер на самом деле понаприсылал.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог