На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> WinInet. FTP,Proxy Authentication,Downlo , Требуется закачать файл по фтп через Proxy.
    Требуется закачать файл по фтп через Proxy. Требуется аутентификация Proxy.
      Да не плохо было бы узнать как
        Посмотри параметры этой функциии

        function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD;
        lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;

        Укажи их все и какачай как обычно


        Добавлено в
        lpszAgent <-|Имя программы, с помощью которой мы соединяемся,
        |может принимать любые значения
        dwAccessType <-|Каким макаром соединяться с и-нетом
        |принимаемые значения:
        | PRE_CONFIG_INTERNET_ACCESS -как в системном реестре
        | LOCAL_INTERNET_ACCESS -напрямую
        | GATEWAY_INTERNET_ACCESS -через GateWay
        | CERN_PROXY_INTERNET_ACCESS -через проксю
        lpszProxy <-|Имя прокси сервера (ставим в nil)
        lpszProxyBypass<-|Не уверен, но смахивает на имена хостов, для которых не
        |использовать проксю (ставим в nil)
        dwFlags <-|Принимаеемые значения:
        | INTERNET_FLAG_ASYNC -этот запрос асинхронный (если есть
        | поддержка), но мы поставим 0

        }

        Я не_ПРОБОВАЛ
        Сообщение отредактировано: pigas -
          на яндексе пример обрашения к

          function InternetConnect(hInet: HINTERNET; lpszServerName: PChar;
          nServerPort: INTERNET_PORT; lpszUsername: PChar; lpszPassword: PChar;
          dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;

          function FtpGetFile(hConnect: HINTERNET; lpszRemoteFile: PChar;
          lpszNewFile: PChar; fFailIfExists: BOOL; dwFlagsAndAttributes: DWORD;
          dwFlags: DWORD; dwContext: DWORD): BOOL stdcall;
            Цитата
            pigas, 16.12.03, 22:56
            Укажи их все и какачай как обычно

            Увы, если поставить в вызов InternetOpen dwAccessType = PRE_CONFIG_INTERNET_ACCESS (как в системном реестре) то авторизация на proxy все равно не проходит, хотя у IE проблем не возникает.
            Если-же подставить dwAccessType = CERN_PROXY_INTERNET_ACCESS (через проксю), то не понятно куда засунуть имя и пароль для авторизации на Proxy.
              С InternetConnect я эксперементировал, тоже неудачно, возможно что-то делал не так. К сожалению, доступ к сетке в которой возникла данная проблема, у меня ограничен. Поэтому не довел работу до конца. Просто нашел "кривое" решение: посредством TWebBrowser - уж он-то знает как smile.gif. Дыра была заткнута.
                Цитата (Петрович @ 16.12.03, 20:46)
                С InternetConnect я эксперементировал, тоже неудачно, возможно что-то делал не так. К сожалению, доступ к сетке в которой возникла данная проблема, у меня ограничен. Поэтому не довел работу до конца. Просто нашел "кривое" решение: посредством TWebBrowser - уж он-то знает как smile.gif. Дыра была заткнута.

                Я поставм\ил локальный прокси и локальный http сервера
                Www 80 порт
                прокси 8080 порт


                fileURL:string='http://localhost/cgi-bin/test_pg.cgi?Проверка_iз_Дельфи'
                +' hq qq' ;


                procedure TForm1.Button1Click(Sender: TObject);


                // 74*30 2100 + 120 = 22000
                const
                BufferSize = 1024;
                var
                hSession, hURL: HInternet;
                Buffer: array[0..BufferSize] of Byte;
                BufferLen: DWORD;
                //f: File;
                sAppName: string;

                function strr:string;
                var
                r:string;
                ir:integer;
                begin
                r:='';
                for ir:=0 to BufferLen do
                r:=r + chr(Buffer[ir]);
                result:=r;

                end;
                begin
                fileURL:=fileURL+inttostr(random(100));
                memo1.Clear;
                sAppName := 'pigas_броузер_мля';
                BufferLen:=0;
                {
                function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD;
                lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;
                }
                hSession := InternetOpen(PChar(sAppName), // имя броузера
                INTERNET_OPEN_TYPE_PROXY , // мол юзается прокси
                'localhost:8080', // имя прокси
                '', // не знаю чего за параметр
                ISO_FORCE_DISCONNECTED); // чегото связанное с отключением



                {
                function InternetConnect(hInet: HINTERNET; lpszServerName: PChar;
                nServerPort: INTERNET_PORT; lpszUsername: PChar; lpszPassword: PChar;
                dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
                }
                // hSession:=InternetConnect(hSession,'localhost',8080,'Юзер','Пасс',0,INTERNET_REQFLAG_VIA_PROXY,0);
                // showmessage(inttostr(integer(hSession)));





                try
                hURL := InternetOpenURL(hSession,
                PChar(fileURL),
                'Accept: */*',11, // длина того чего Accept
                // INTERNET_FLAG_EXISTING_CONNECT,
                INTERNET_FLAG_RAW_DATA,
                WININET_API_FLAG_SYNC);
                try
                repeat
                InternetReadFile(hURL, @Buffer,
                SizeOf(Buffer), BufferLen);
                memo1.Lines.Add(strr);
                until BufferLen = 0;
                finally
                InternetCloseHandle(hURL) ;
                end;
                finally
                InternetCloseHandle(hSession);
                end;
                end;
                  Цитата
                  pigas, 17.12.03, 20:37
                  // hSession:=InternetConnect(hSession,'localhost',8080,'Юзер','Пасс',0,INTERNET_REQFLAG_VIA_PROXY,0);

                  А почему закоментировано?
                  У меня все было именно так и написанно как у тебя, правда InternetConnect при это не дергал (в пртчем как и ты). При этом, если proxy был без авторизации, то все Ок. А вот если Proxy требовал имя и пароль, то вместо требуемой страницы, я получал страничку с сообщением об ошибке авторизации. Добавление InternetConnect мне не помогло. И вообще, мне не понятно, что делать с результатом InternetConnect? В MSDN про InternetConnect сказано:
                  Returns a valid handle to the FTP, Gopher, or HTTP session

                  На сколько я понимаю, с таким хендлом в InternetOpenURL уже нельза соваться.
                    Я это к тому что к своему проксику ( без авторизации ) я смог вот так подключится

                    hSession := InternetOpen(PChar(sAppName), // имя броузера
                    INTERNET_OPEN_TYPE_PROXY , // мол юзается прокси
                    'localhost:8080', // имя прокси
                    '', // не знаю чего за параметр
                    ISO_FORCE_DISCONNECTED); // чегото связанное с отключением

                    А после вызова
                    hSession:=InternetConnect(hSession,'localhost',8080,'Юзер','Пасс',0,INTERNET_REQFLAG_VIA_PROXY,0);

                    Получается так что
                    hSession = nil
                    Ну и конечно дальше ничего не работает


                    Петрович ,а с какими ты параметрами пробовал InternetConnect ?
                    Еслиб работал InternetConnect можно былобы цепочку прокси сделать .............
                      Цитата
                      pigas, 18.12.03, 00:59
                      Я это к тому что к своему проксику ( без авторизации ) я смог вот так подключится

                      Во, во, а в теме-то сразу было сказанно Proxy Authentication. Без авторизации проблем нет.
                      Цитата
                      pigas, 18.12.03, 00:59
                      Петрович ,а с какими ты параметрами пробовал InternetConnect ?

                      Вообще-то, я вызывал ее приблизительно так (для твоего случая):
                      InternetConnect(hSession,'localhost',8080,'Юзер','Пасс',INTERNET_SERVICE_HTTP,0,0);

                      Только мне кажется что результат InternetConnect надо подавать на вход HttpOpenRequest. Это во первых. А во вторых, суда по описанию в MSDN, имя и пароль в InternetConnect имеются в виду не для proxy, а непосредственно для сервера (http, ftp, gopher).
                        Тема актуальная. У меня прокся без басик авторизации. Выйти за нее, я тоже не могу. TWebBrowser в моем случае мало пока чем помогает.
                        Кратенько. Общаюсь по средствам Get и Post с сервачком.
                        Внимание, требуется прога примитивненькая (4 эдита 2 баттона), котороая позволит отправлять Post через мою проксю.
                        Денежное вознаграждение гарантирую (не очень большое).
                          Да я и не думал, что это окажется так сложно. Единственное что я пока нашел это работа через IdHTTP
                          with IdHTTP1.ProxyParams do begin
                            ProxyServer:='твой-прокси';
                            ProxyPort:=порт;
                            ProxyUsername:='имя_пользователя';
                            ProxyPassword:='пароль';
                            BasicAuthentication:=True; // Если пароль не зашифрован...
                          end;
                          Memo1.Lines.Add(IdHTTP1.Get('http://домен/index.htm'));
                            Вот такая строка (..."GET ftp://ftpservername/file.zip HTTP/1.1" ...) инициализируется на прокси при запросе с IE (ftp://ftpservername/file.zip), тогда идет запрос на аутентификацию и.т.д - файл закачивается без проблем.
                            При использовании в качестве сервиса INTERNET_SERVICE_ftp
                            ...
                            hConnectHandle := InternetConnect ( hOpenHandle,
                            'ftpservername',
                            INTERNET_INVALID_PORT_NUMBER,
                            nil,
                            nil,
                            INTERNET_SERVICE_ftp,
                            0,
                            0
                            );
                            httpOpenRequest() на выходе nil , а если подставить INTERNET_SERVICE_HTTP, тогда идет все нормально (т.е. идет запрос на аутентификацию), в логе прокси
                            ..."GET http://ftpservername/file.zip HTTP/1.1" ..."
                            Вопрос - Как сделать запрос ресурса такой же как в IE? т.е. (..."GET ftp://ftpservername/file.zip HTTP/1.1" ...) Чтобы потом можно было бы закачать этот ресурс доступными методами....
                            ЗЫ. Хочется как в IE...
                            Сообщение отредактировано: Zvik -
                              Zvik
                              Чейто я не понял. Ты говоришь идет запрос на аутентификацию, а где ты ему (proxy) сообщаешь имя и пароль для аутентификации?
                              Еще раз напоминаю: мой прокси ЗАПАРАЛИРОВАН, и ТРЕБУЕТ ОБЯЗАТЕЛЬНОЙ АУТЕНТИФИКАЦИИ.
                              Сообщение отредактировано: Петрович -
                                Аутентификация работает при http сервисе. Я просто думаю, нельзя ли сначала ввести логин и пароль при этом сервисе а потом как-то используя InternetOpenURL, подключиться к этому же ресурсу, но только ввести уже "hUrl:='ftp://servername/file.zip'".
                                P.S. У меня тоже прокси, требующий аутентификацию... Не верю, что нельзя пробиться, IE как-то же работает.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0355 ]   [ 16 queries used ]   [ Generated: 27.04.24, 13:43 GMT ]