Delphi XE中HTTP代理的身份验证

Delphi XE中HTTP代理的身份验证,delphi,proxy,twebbrowser,Delphi,Proxy,Twebbrowser,我需要一点帮助: 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

我需要一点帮助:

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;
但是它不起作用,尽管如果它只是在IE设置中指定,这个代理100%起作用。

Unit1;
unit Unit1;

// Code By Alireza Talebi  , asiapardaz.blogfa.com  ,  alireza.talebi90@yahoo.com
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.
//代码由Alireza Talebi、asiapardaz.blogfa.com、Alireza编写。talebi90@yahoo.com 接口 使用 窗口、消息、系统工具、变体、类、图形、控件、窗体、, 对话框、urlmon、wininet、StdCtrls、ocletrls、SHDocVw、ExtCtrls; 类型 TForm1=类(TForm) 按钮1:t按钮; 编辑1:TEdit;//代理地址 编辑2:TEdit;//港口 编辑3:TEdit;//网址 WebBrowser1:TwebbBrowser; 程序按钮1点击(发送方:ToObject); 私有的 {私有声明} 公众的 {公开声明} 结束; 变量 表1:TForm1; i:整数; 实施 {$R*.dfm} 过程代理(文本:字符串); var PIInfo:PInternetProxyInfo; 开始 新的(PIInfo); PIInfo^.dwAccessType:=互联网\开放\类型\代理; PIInfo^.lpszProxy:=(PAnsiChar(文本)); PIInfo^.lpszProxyBypass:=PChar(“”); UrlMkSetSessionOption(互联网代理,piinfo,SizeOf(互联网代理信息),0); 处置(PIInfo); 结束; 程序性疼痛; 变量 lpEntryInfo:PInternetCacheEntryInfo; hCacheDir:长单词; dwEntrySize:LongWord; 开始 dwEntrySize:=0; FindFirstUrlcachentry(无,TinternetCachentryInfo(无),dEntrySize); GetMem(lpEntryInfo,dwEntrySize); 如果dwEntrySize>0,则lpEntryInfo^.dwStructSize:=dwEntrySize; hCacheDir:=findfirsturlcachentry(nil,lpEntryInfo^,dwEntrySize); 如果hCacheDir为0,则 开始 重复 DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName); FreeMem(lpEntryInfo,dwEntrySize); dwEntrySize:=0; FindNextUrlCacheEntry(hCacheDir、TInternetCacheEntryInfo(nil^)、dwEntrySize); GetMem(lpEntryInfo,dwEntrySize); 如果dwEntrySize>0,则lpEntryInfo^.dwStructSize:=dwEntrySize; 直到找不到exturlcacheentry(hCacheDir、lpEntryInfo^、dwEntrySize); 结束; FreeMem(lpEntryInfo,dwEntrySize); FindCloseUrlCache(hCacheDir); 结束; 会议程序; 开始 InternetSetOption(无,INTERNET选项结束浏览器会话,无,0); 结束; 程序TForm1.按钮1单击(发送方:TObject); 开始 删除疼痛; 结束会议; 代理(Trim(Edit1.Text)+':'+Trim(Edit2.Text));//代理:端口 WebBrowser1.导航(修剪(Edit3.Text)); 结束; 结束。
“但它不起作用”毫无意义,除非你告诉我们这是什么意思。我们看不到你的屏幕,也看不懂你的心思——你需要解释“不工作”。你还需要问一个问题——在你的帖子里没有一个。当然,你是对的,对不起。我尝试了许多不同的代理,但结果相同:1。没有身份验证的代理可以很好地工作。具有身份验证的代理不允许浏览器进入请求的页面-只显示“无法显示页面”。编辑您的帖子,并在那里提供信息,以便人们可以查看。您还没有提出任何实际问题。@KenWhite他在问为什么代码不能与需要身份验证的代理一起工作。这对你来说够了吗?@RedOctober你找到解决办法了吗?如果是这样的话,请将其作为答案发布。如果您能够深入了解解决方案工作的原因,而不仅仅是编写所有代码,那就太好了。