Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Upload файла на сервер, upload по ftp 
:(
    Опции темы
Dimich
Дата 4.8.2005, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: нет
Всего: 7



Сколько времени прошло, пришлось таки вернуться к неразрешенной еще тогда проблемке: работа с ftp через проксю. В качестве прокси стоит на линуксовой машине squid. Собственно это не ftp прокси, а HTTPS с поддержкой FTP. Так может тут какие нюансы есть? Не знаю, поэтому если кто знает, объясните плиз. Но IE работает ведь с ftp, Total Commander тож работает. Как и мне такое сделать (чтоб работало) пока не понял.... Пробовал код Radmin'a - не хочет через проксю соединяться, NMFTP и idFTP тоже не хотят через мою проксю, установил ICS компоненты - та же ситуация.....
Код
  ftpClient1.ConnectionType := ftpProxy;
  ftpClient1.HostDirName := '/';
  ftpClient1.HostName := 'ftp.somehost.ru';
  ftpClient1.UserName := 'myusername';
  ftpClient1.PassWord := 'mypassword';
  ftpClient1.Port := 'ftp';
  ftpClient1.ProxyServer := '192.168.99.3';
  ftpClient1.ProxyPort := '3128';
  ftpClient1.Passive := true;
  ftpClient1.Connect;  // получаю False

Подскажите, как быть? Где я делаю не правильно? Как еще можно решить задачу upload/download файлов на ftp через прокси?
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Dimich
Дата 9.8.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: нет
Всего: 7



Ситуация развивается следующим образом: решил все делать функциями API, через WinInet. Вот что получилось для Download:
Код
// адаптировано для своих нужд с MSDN
const
  bInitalRequest : bool = TRUE;
Type
  tBuf = array [1..1024] of char;
var
  hConnect, InetHandle: HInternet;
  b : bool;
  dwCode: ^DWORD;
  dwSize: DWORD;
  DUMMY : DWORD;
  dwLength, dWritten : DWORD;
  szBuffer : ^tBuf;
begin
  New (dwCode);
  New (szBuffer);
  InetHandle := InternetOpen(PChar('FTP'),
                             INTERNET_OPEN_TYPE_PRECONFIG,
                             nil,
                             nil,
                             INTERNET_FLAG_KEEP_CONNECTION);
  hConnect := InternetOpenUrl (InetHandle, 'ftp://ftpuser:[email protected]/example.txt', nil, 0,
                                     INTERNET_FLAG_DONT_CACHE or
                                     INTERNET_FLAG_KEEP_CONNECTION or
                                     INTERNET_FLAG_RELOAD, 0);
  if not bInitalRequest then
    if not HttpSendRequest (hConnect, nil, 0, nil, 0) then ShowMessage ('Error: HttpSendRequest');
  dwSize:= sizeof(dwCode^);
  if not InternetQueryOption (hConnect, INTERNET_OPTION_HANDLE_TYPE,
                        dwCode, dwSize) then ShowMessage ('Error: InternetQueryOption');
  if ( (dwCode^ = INTERNET_HANDLE_TYPE_HTTP_REQUEST)  or
       (dwCode^ = INTERNET_HANDLE_TYPE_CONNECT_HTTP) ) then
  begin
    dwSize := sizeof (DWORD) ;
    if not HttpQueryInfo (hConnect, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER,
                         dwCode, dwSize, DUMMY)
    then
    if dwCode^ = HTTP_STATUS_PROXY_AUTH_REQ then
    begin
      ShowMessage ('Auth Required!');  // доделаю потом, чтобы пройти авторизацию прокси
    end;
  end;
  if dwCode^ <> HTTP_STATUS_PROXY_AUTH_REQ then
  while true do
  begin
     dwLength := SizeOf (szBuffer^);
     if not InternetReadFile (hConnect, szBuffer, dwLength, dWritten) then
     begin
       ShowMessage ('ERROR: InternetReadFile');
       break;
       // delete file
     end;
     if dWritten = 0 then break
     else
     begin
       // Тут собственно пишем буфер в файл
     end;
  end;
  InternetCloseHandle(InetHandle);
  Dispose (dwCode);
  Dispose (szBuffer);

Это работает через прокси замечательно, а вот как закачать файл на ftp сервер? Ответ напрашивается самим собой - InternetWriteFile. Но простая замена Read на Write тут не проходит. GetLastError возвращает ошибку после InternetWriteFile: ERROR_INTERNET_INCORRECT_HANDLE_STATE (12019) - The requested operation cannot be carried out because the handle supplied is not in the correct state.
Смысл ошибки вроде как понятен. А как решить эту задачу не знаю. Знаний маловато.
Собственно читаю http://msdn.microsoft.com/library/default....etwritefile.asp, но реализовать на практике ничего не получается.
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
belka
Дата 15.12.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 17.9.2006

Репутация: нет
Всего: 3



Цитата(RA @  7.6.2005,  20:23 Найти цитируемый пост)
InternetSetStatusCallback(InetHandle, @InetCallback);

что означает @InetCallback?? вернее что значит @???
да и InetCallback?? что все это??
---
сорри за тупой вопрос ))
--------------------
Просто я живу на улице Ленина и меня зарубает время от времени...aka technogen007
PM MAIL   Вверх
Matematik
Дата 15.12.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



В ф-ю InternetSetStatusCallback() передается адрес ф-и InetCallback()
InetCallback() - callback ф-я
@ - взять адрес финкции

PM MAIL WWW ICQ   Вверх
belka
Дата 15.12.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 17.9.2006

Репутация: нет
Всего: 3



Matematik, блин, а можно как-нить поподробнее??
я пробую код RA'dmina, так вот что-то не так получается.. дебагер ругает @InetCallBack - пишет что "Undeclared identifier 'InetCallback'"!! блин.. 
ПОЧЕМУ??
--------------------
Просто я живу на улице Ленина и меня зарубает время от времени...aka technogen007
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0828 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.