Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];

Вниз

Получить найстройки прокси изпользуя 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
15-1317655565
И. Павел
2011-10-03 19:26
2012.01.22
Автоинкрементные поля - вставка пропущенный значений


15-1317710577
TUser
2011-10-04 10:42
2012.01.22
Фестиваль науки


15-1317627402
OW
2011-10-03 11:36
2012.01.22
Задумка. Игра Пираты. Интересно ли будет?


15-1317617050
И. Павел
2011-10-03 08:44
2012.01.22
Обновление программы в Windows 7


15-1317227550
Alik
2011-09-28 20:32
2012.01.22
Delphi - Параллельные вычисления в многоядерных машинах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский