2012-10-04 66 views
0

HTTP代理我需要一些帮助:身份认证在德尔福XE

uses wininet, urlmon; 
.... 

var proxy_info : PInternetProxyInfo; 
.... 

begin 
    user:='mycooluser'; 
    pass:='mycoolpass'; 
    UserAgent:='MSIE'; 
    New (proxy_info); 
    proxy_info^.dwAccessType := INTERNET_OPEN_TYPE_PROXY; 
    proxy_info^.lpszProxy := PAnsiChar('XXX.XXX.XXX.XXX:ZZZZ'); 
    proxy_info^.lpszProxyBypass := PAnsiChar(''); 
    UrlMkSetSessionOption(INTERNET_OPTION_PROXY_USERNAME, PAnsichar(user), Length(user)+1, 0); 
    UrlMkSetSessionOption(INTERNET_OPTION_PROXY_PASSWORD, PAnsichar(pass), Length(pass)+1, 0); 
    UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, PChar(UserAgent), Length(UserAgent)+1, 0); 
    UrlMkSetSessionOption(INTERNET_OPTION_PROXY, proxy_info, SizeOf(Internet_Proxy_Info), 0); 
    Dispose(proxy_info); 

    EmbeddedWB1.Navigate('http://2ip.ru'); 
end; 

但它不工作,虽然这个代理100%的工作,如果它只是在IE设置中指定。

+2

“但它不起作用”是没有意义的,除非你告诉我们这是什么意思。我们无法看到您的屏幕或阅读您的想法 - 您需要解释“不起作用”。您还需要真正提出一个问题 - 您的帖子中没有任何地方。 –

+1

当然,你说得对,对不起。我尝试了许多不同的代理,但结果如下: 1.没有身份验证的代理运行良好 2.身份验证的代理不允许浏览器转到请求的页面 - 只显示“无法显示页面”。 –

+0

编辑你的文章,并在那里提供信息,以便人们可以看到它。你还没有问过实际的问题。 –

回答

0
unit Unit1; 

// Code By Alireza Talebi , asiapardaz.blogfa.com , [email protected] 
interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, urlmon, wininet, StdCtrls, OleCtrls, SHDocVw, ExtCtrls; 

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    Edit1: TEdit; // Proxy Address 
    Edit2: TEdit; // Port 
    Edit3: TEdit; // Web Address 
    WebBrowser1: TWebBrowser; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 
    i:Integer; 
implementation 

{$R *.dfm} 

procedure proxy(text:string); 
var PIInfo: PInternetProxyInfo; 
begin 
New(PIInfo); 
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY; 
PIInfo^.lpszProxy:=(PAnsiChar(text)); 
PIInfo^.lpszProxyBypass := PChar(''); 
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0); 
Dispose(PIInfo); 
end; 

procedure DeleteIECache; 
var 
    lpEntryInfo: PInternetCacheEntryInfo; 
    hCacheDir: LongWord; 
    dwEntrySize: LongWord; 
begin 
    dwEntrySize := 0; 
    FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); 
    GetMem(lpEntryInfo, dwEntrySize); 
    if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; 
    hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize); 
    if hCacheDir <> 0 then 
    begin 
    repeat 
     DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName); 
     FreeMem(lpEntryInfo, dwEntrySize); 
     dwEntrySize := 0; 
     FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize); 
     GetMem(lpEntryInfo, dwEntrySize); 
     if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; 
    until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize); 
    end; 
    FreeMem(lpEntryInfo, dwEntrySize); 
    FindCloseUrlCache(hCacheDir); 
end; 

procedure EndBrowserSession; 
begin 
    InternetSetOption(nil, INTERNET_OPTION_END_BROWSER_SESSION, nil, 0); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
DeleteIECache; 
EndBrowserSession; 
proxy(Trim(Edit1.Text)+':'+Trim(Edit2.Text)); // Proxy:Port 
WebBrowser1.Navigate(Trim(Edit3.Text)); 
end; 

end. 
+0

除了仅写入所有代码之外或者除了编写所有代码之外,如果您可以为您解决方案的工作原理提供一些见解。 – simbabque