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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi XE5 + WinInet + авторизация на прокси 
:(
    Опции темы
Vitus28
Дата 5.12.2015, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго всем времени суток.
Помогите, сталкнуся с такой проблемой. Необходимо получить доступ через поркси. Перечитал кучу форумов и мат части, но не могу победить. Ответ от прокси 407 и ничего не могу поделать!
Наше похожую реализацию с использованием компонентов Alcinoe (они тоже написаны с использованием WinInet). Перекопал весь код, ну тоже самое делаю (с поправками на XE5), но в их примере (правда почему-то со второго раза) авторизация проходится (значит логин и пароль верные), а в моем случае нет!

Код

label
  again;
var
  hSession       : hInternet;
  hConnect       : hInternet;

  dwCode, dwSize : dword;
  dwLength       : dword;
  User, Pass     : string;

  BytesRead: Cardinal;
begin
  Memo2.Clear;

  if InternetAttemptConnect(0) <> ERROR_SUCCESS then Abort;
  hSession:= InternetOpen('InetURL:/1.0',
                          INTERNET_OPEN_TYPE_PROXY,
                          PChar('XXX.XXX.XXX.XXX:XXXX'), 
                          nil,
                          INTERNET_FLAG_KEEP_CONNECTION);
  if assigned(hSession) then begin
    hConnect:=InternetOpenUrl(hSession,
                              PWideChar(Edit1.Text),
                              nil,
                              0,
                              INTERNET_FLAG_DONT_CACHE + INTERNET_FLAG_KEEP_CONNECTION + INTERNET_FLAG_RELOAD,
                              0);

    if assigned(hConnect) then begin
again:

      HttpSendRequest(hConnect,
                             '',
                             0,
                             nil,
                             0);
      dwSize:=sizeof(dwCode);
      if not InternetQueryOption(hConnect,
                                 INTERNET_OPTION_HANDLE_TYPE,
                                 @dwCode,
                                 &dwSize) then Memo2.Lines.Add('Ошибка InternetQueryOption ' + SysErrorMessage(GetLastError))
      else begin
        if ((dwCode = INTERNET_HANDLE_TYPE_HTTP_REQUEST) or (dwCode = INTERNET_HANDLE_TYPE_CONNECT_HTTP)) then begin
            // if were are here, it means that we use HTTP to talk the proxy
            dwSize:=sizeof(DWORD);
          BytesRead:=0;
            if not HttpQueryInfo(hConnect,
                               HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER,
                               @dwCode,
                               dwSize,
                               BytesRead) then Memo2.Lines.Add('Ошибка HttpQueryInfo ' + SysErrorMessage(GetLastError))
          else begin
            Memo1.Lines.Add(IntToStr(dwCode));
            if dwCode = HTTP_STATUS_PROXY_AUTH_REQ then begin
                  if not InternetQueryDataAvailable(hConnect,
                                                dwLength,
                                                0,
                                                0) then Memo2.Lines.Add('Ошибка InternetQueryDataAvailable ' + SysErrorMessage(GetLastError))
              else begin
                    // Acquire user credentials.
                User:='login';
                Pass:='pass';

                   if not InternetSetOption(hConnect,
                                         INTERNET_OPTION_PROXY_USERNAME,
                                         PChar(User),
                                         length(User)+1) then Memo2.Lines.Add('Ошибка PROXY_USERNAME ' + SysErrorMessage(GetLastError));
                   if not InternetSetOption(hConnect,
                                         INTERNET_OPTION_PROXY_PASSWORD,
                                         PChar(Pass),
                                         length(Pass)+1) then Memo2.Lines.Add('Ошибка PROXY_PASSWORD ' + SysErrorMessage(GetLastError));

                    bInitalRequest:=false;
                   goto again;
              end;
            end else Memo2.Lines.Add('CODE ' + IntToStr(dwCode));
          end;
        end;
      end;
      InternetCloseHandle(hConnect);
    end else Memo2.Lines.Add('Ошибка InternetOpen ' + SysErrorMessage(GetLastError));
    InternetCloseHandle(hSession);
  end else Memo2.Lines.Add('Ошибка InternetConnect ' + SysErrorMessage(GetLastError));


В результаты в Memo выводится 407 (многократно)

Подскажите что я делаю не так?!
На многих форумах есть подобные темы, но почему-то ни где нет ответа.
Спасибо всем!
PM MAIL   Вверх
Vitus28
Дата 5.12.2015, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может я что то с типами или размерами напутал при передаче логина и пароля? Это  строки 64 и 68 в коде
Я много лет программировал на delphi 6 и со всем недавно перешел на хе5 и пока еще не очень уверен что поавильно использую типы строковых переменных, изменившиеся причине перехода на unicode

Это сообщение отредактировал(а) Vitus28 - 5.12.2015, 10:52
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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