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你找到解决办法了吗?如果是这样的话,请将其作为答案发布。如果您能够深入了解解决方案工作的原因,而不仅仅是编写所有代码,那就太好了。