我这里有一个小程序,该程序使用idHTTP从https服务器下载一些内容。我需要更改此程序以使用HTTPS代理服务器。 对于HTTP的代理1.1.1.1 8080和对于HTTPS的2.2.2.2 8084,我有两个IP地址。
我更改了代码,使其看起来像这样:
try
IdHTTP1:=TIdHTTP.Create(nil);
try
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
// does not seem to do anything
LHandler.TransparentProxy.Host:='2.2.2.2';
LHandler.TransparentProxy.Port:=8084;
LHandler.TransparentProxy.Enabled:=true;
// this works even when using HTTP proxy for HTTPS
idHTTP1.ProxyParams.ProxyServer:='1.1.1.1';
idHTTP1.ProxyParams.ProxyPort:=8080;
IdHTTP1.IOHandler:=LHandler;
Src:= IdHTTP1.Get('https://csv.business.tomtom.com/extern?account='+company+'&username='+user+'&password='+password+'&apikey='+apikey+'&lang=en&action=showObjectReportExtern');
finally
LHandler.Free;
end;
finally
IdHTTP1.Free;
end;
except on E: Exception do
// Writeln(E.ClassName, ': ', E.Message);
end;
有人可以告诉我如何告诉idHTTP LHandler使用HTTPS代理吗?
谢谢!
答案 0 :(得分:3)
您仅需单独使用TIdHTTP.ProxyParams
,并确保为其分配正确 HTTP代理以用于您所请求的协议方案(HTTP与HTTPS):< / p>
try
IdHTTP1 := TIdHTTP.Create(nil);
try
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
IdHTTP1.IOHandler := LHandler;
IdHTTP1.ProxyParams.ProxyServer := '2.2.2.2';
IdHTTP1.ProxyParams.ProxyPort := 8084;
Src := IdHTTP1.Get('https://csv.business.tomtom.com/extern?account='+company+'&username='+user+'&password='+password+'&apikey='+apikey+'&lang=en&action=showObjectReportExtern');
finally
IdHTTP1.Free;
end;
except
on E: Exception do
// Writeln(E.ClassName, ': ', E.Message);
end;
TransparentProxy
属性无法正常运行。
当您没有将TIdCustomTransparentProxy
派生的组件显式分配给TransparentProxy
属性(不是)时,属性getter将创建一个默认的TIdSocksInfo
组件。您不希望在这种情况下使用SOCKS代理,此外,TIdCustomTransparentProxy.Enabled
属性是启用TIdSocksInfo
的错误方法,您必须使用TIdSocksInfo.Version
属性。 / p>