2012-10-04 71 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