Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Установить proxy-server


Автор: MetalFan 16.12.2007, 19:06
встретил только 2 реализации смены текущей прокси для ослика.
1. через реестр
2. через InternetSetOption + INTERNET_OPTION_PROXY
но 
Цитата(MSDN)
Note  It is recommended that INTERNET_OPTION_PER_CONNECTION_OPTION be used instead of INTERNET_OPTION_PROXY. For more information, see http://support.microsoft.com/kb/226473.

там же приведены примеры. но на делфи я реализации не нашел.
вот код, адаптированный под делфи:
Код

const
  INTERNET_OPTION_PER_CONNECTION_OPTION = 75;
//
// Options used in INTERNET_PER_CONN_OPTON struct
//
  INTERNET_PER_CONN_FLAGS                        = 1;
  INTERNET_PER_CONN_PROXY_SERVER                 = 2;
  INTERNET_PER_CONN_PROXY_BYPASS                 = 3;
  INTERNET_PER_CONN_AUTOCONFIG_URL               = 4;
  INTERNET_PER_CONN_AUTODISCOVERY_FLAGS          = 5;
  INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL     = 6;
  INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS = 7;
  INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME  = 8;
  INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL   = 9;

//
// PER_CONN_FLAGS
//
  PROXY_TYPE_DIRECT              =                $00000001;  // direct to net
  PROXY_TYPE_PROXY               =                $00000002;  // via named proxy
  PROXY_TYPE_AUTO_PROXY_URL      =                $00000004;  // autoproxy URL
  PROXY_TYPE_AUTO_DETECT         =                $00000008;  // use autoproxy detection

type
  PINTERNET_PER_CONN_OPTION = ^INTERNET_PER_CONN_OPTION;
  INTERNET_PER_CONN_OPTION = record
    dwOption : DWORD;            // option to be queried or set
    case Byte of
      0: (dwValue: DWORD);        // dword value for the option
      1: (pszValue: LPSTR);       // pointer to string value for the option
      2: (ftValue: FILETIME);        // file-time value for the option
  end;

  INTERNET_PER_CONN_OPTION_LIST = record
    dwSize: DWORD;             // size of the INTERNET_PER_CONN_OPTION_LIST struct
    pszConnection: LPSTR;      // connection name to set/query options
    dwOptionCount: DWORD;      // number of options to set/query
    dwOptionError: DWORD;      // on error, which option failed
    pOptions: PINTERNET_PER_CONN_OPTION; // array of options to set/query
  end;

function SetProxyGlobal( const AProxyHost: string; AProxyPort: Word ): Boolean;
var
  lList:  INTERNET_PER_CONN_OPTION_LIST;
  lOption: array[0..1] of INTERNET_PER_CONN_OPTION;
  lProxy: string;
  lResetProxy: Boolean;
begin
  lResetProxy := (AProxyHost = '') or (AProxyPort = 0);
  lProxy := AProxyHost + ':' + IntToStr( AProxyPort );
  lOption[0].dwOption := INTERNET_PER_CONN_FLAGS;
  if lResetProxy then
    lOption[0].dwValue := PROXY_TYPE_DIRECT
  else
    lOption[0].dwValue := PROXY_TYPE_PROXY;
  lOption[1].dwOption := INTERNET_PER_CONN_PROXY_SERVER;
  lOption[1].pszValue := PChar( lProxy );
  lList.dwSize := SizeOf(INTERNET_PER_CONN_OPTION_LIST);
  lList.pszConnection := nil;
  if lResetProxy then
    lList.dwOptionCount := 1
  else
    lList.dwOptionCount := 2;
  lList.dwOptionError := 0;
  lList.pOptions := @lOption[0];
  Result := InternetSetOption( nil, INTERNET_OPTION_PER_CONNECTION_OPTION, @lList, SizeOf(INTERNET_PER_CONN_OPTION_LIST) );
  if Result then
    InternetSetOption(nil, INTERNET_OPTION_REFRESH, nil, 0);
end;


примеры использования:
установить:
Код

  if not SetProxyGlobal( 'localhost', 8888 ) then
    RaiseLastOSError;


установить прямое соединение:
Код

  if not SetProxyGlobal( '', 0 ) then
    RaiseLastOSError;


Автор: vovksextra 15.2.2008, 04:24
Хочу добавить ссылку на еще один код 

http://local.com.ua/forum/index.php?showtopic=10895


это не реклама - лень просто еще раз постить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)