Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.22;
Скачать: CL | DM;

Вниз

Получить найстройки прокси изпользуя WinHttpGetProxyForUrl   Найти похожие ветки 

 
NeonSimfi ©   (2009-08-11 19:36) [0]

Пожалуйста, помогите получить настройки прокси-сервера используя функция WinHttpGetProxyForUrl  из WinHttp.dll. "Вариант решения" используя реестр(или через модуль WinInet) не подходит.


 
Дмитрий Белькевич   (2009-08-12 15:28) [1]


function GetProxyInformation: string;
var
ProxyInfo: PInternetProxyInfo;
Len: LongWord;
begin
Result := "";
Len := 4096;
GetMem(ProxyInfo, Len);
try
 if InternetQueryOption(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then
  if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then
  begin
   Result := ProxyInfo^.lpszProxy
  end;
finally
 FreeMem(ProxyInfo);
end;
end;

{**************************************************************************
* NAME:    GetProxyServer
* DESC:    Proxy-Server Einstellungen abfragen
* PARAMS:  protocol => z.B. "http" oder "ftp"
* RESULT:  [-]
* CREATED: 08-04-2004/shmia
*************************************************************************}

procedure GetProxyServer(protocol: string; var ProxyServer: string; var ProxyPort: Integer);
var
i: Integer;
proxyinfo: string;
begin
ProxyServer := "";
ProxyPort := 0;

proxyinfo := GetProxyInformation;
if proxyinfo = "" then
 Exit;

protocol := protocol + "=";

i := Pos(protocol, proxyinfo);
if i > 0 then
begin
 Delete(proxyinfo, 1, i + Length(protocol));
 i := Pos(";", ProxyServer);
 if i > 0 then
  proxyinfo := Copy(proxyinfo, 1, i - 1);
end;

i := Pos(":", proxyinfo);
if i > 0 then
begin
 ProxyPort := StrToIntDef(Copy(proxyinfo, i + 1, Length(proxyinfo) - i), 0);
 ProxyServer := Copy(proxyinfo, 1, i - 1)
end
end;


 
Дмитрий Белькевич   (2009-08-12 15:29) [2]


> (или через модуль WinInet)


Эээээ... Сорри, не увидел... Это через WinInet.


 
Дмитрий Белькевич   (2009-08-12 15:43) [3]

Смотри поиск. Сразу нашлось:

http://www.sql.ru/forum/actualthread.aspx?tid=562313

http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-interop/4397/Problem-using-a-WinHttpGetProxyForUrl-function-Struct-use


 
NeonSimfi ©   (2009-08-13 11:59) [4]

Спасибо большое за ссылочку (http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-interop/4397/Problem-using-a-WinHttpGetProxyForUrl-function-Struct-use), но что у меня не выходит WinHttpGetProxyForUrl все время возвращает False (GetLastError всегда 0). Вот код:

type
 LPVOID = Pointer;

 pWinHttpAutoProxyOptions = ^WINHTTP_AUTOPROXY_OPTIONS;
 WINHTTP_AUTOPROXY_OPTIONS = record
    dwFlags: DWORD;
    dwAutoDetectFlags: DWORD;
    lpszAutoConfigUrl: LPCWSTR;
    lpvReserved: LPVOID;
    dwReserved: DWORD;
    fAutoLogonIfChallenged: BOOL;
 end;

 TWinHttpOpen = function(pwszUserAgent: LPCWSTR; dwAccessType: DWORD; pwszProxyName: LPCWSTR; pwszProxyBypass: LPCWSTR; dwFlags: DWORD): HINTERNET; stdcall;
 TWinHttpCloseHandle = function(hInternet: HINTERNET): BOOL; stdcall;
 TWinHttpGetProxyForUrl = function(hSession: HINTERNET; lpcwszUrl: LPCWSTR; pAutoProxyOptions: pWinHttpAutoProxyOptions; out pProxyInfo: PInternetProxyInfo): BOOL; stdcall;

const

 WINHTTP_ACCESS_TYPE_NO_PROXY    = 1;

 WINHTTP_AUTOPROXY_AUTO_DETECT    = $00000001;
 WINHTTP_AUTOPROXY_CONFIG_URL    = $00000002;
 WINHTTP_AUTO_DETECT_TYPE_DHCP    = $00000001;
 WINHTTP_AUTO_DETECT_TYPE_DNS_A    = $00000002;

 TEST_PAGE_URL = "http://www.google.com/";
 userAgent = "Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1; SV1)";
var
 WinHttpDLL: THandle;

 WinHttpGetProxyForUrl: TWinHttpGetProxyForUrl;
 WinHttpOpen: TWinHttpOpen;
 WinHttpCloseHandle: TWinHttpCloseHandle;

 hSession: HINTERNET;
 ProxyInfo: PInternetProxyInfo;
 pAutoProxyOptions: pWinHttpAutoProxyOptions;

begin

 WinHttpDLL := LoadLibrary(PChar("WinHttp.dll"));
 try

 @WinHttpOpen   := GetProcAddress(WinHttpDLL, "WinHttpOpen");
 @WinHttpCloseHandle   := GetProcAddress(WinHttpDLL, "WinHttpCloseHandle");
 @WinHttpGetProxyForUrl := GetProcAddress(WinHttpDLL, WinHttpGetProxyForUrl");

     hSession := WinHttpOpen(userAgent, WINHTTP_ACCESS_TYPE_NO_PROXY, nil, nil, 0);

     New(ProxyInfo);
     New(pAutoProxyOptions);

      pAutoProxyOptions^.dwFlags := WINHTTP_AUTOPROXY_CONFIG_URL;
      pAutoProxyOptions^.dwAutoDetectFlags := 0;
      pAutoProxyOptions^.lpszAutoConfigUrl := TEST_PAGE_URL;
      pAutoProxyOptions^.lpvReserved := nil;
      pAutoProxyOptions^.dwReserved := 0;
      pAutoProxyOptions^.fAutoLogonIfChallenged := True;

      if  WinHttpGetProxyForUrl(hSession,
                                TEST_PAGE_URL,
                                pAutoProxyOptions,
                                ProxyInfo)
       then  ShowMessage("TRUE")
      else   ShowMessage("FALSE");

       ShowMessage(IntToStr(GetLastError));

    WinHttpCloseHandle(hSession);

    Dispose(pAutoProxyOptions);
    Dispose(ProxyInfo);

 finally
   FreeLibrary(WinHttpDLL);
 end;


Подскажите, пожалуйста, где ошибка...



Страницы: 1 вся ветка

Текущий архив: 2012.01.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
2-1317559190
lesstab
2011-10-02 16:39
2012.01.22
Групповое редактирование выбранных строк в ДБГриде


15-1318064119
turbouser
2011-10-08 12:55
2012.01.22
Прелести XE2


2-1318359297
Gu
2011-10-11 22:54
2012.01.22
обработчик


15-1318001461
Leon-Z
2011-10-07 19:31
2012.01.22
MySQL & ODBC ???


15-1317761204
Делфиец
2011-10-05 00:46
2012.01.22
А что за кайф быть мастером делфи?