这里我有一个小程序,它使用idHTTP从https服务器下载一些东西。我需要修改这个程序来使用HTTPS代理服务器。代理1.1.1.1.8080用于HTTP,2.2.2.8084用于HTTPS。
我修改了代码如下:
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代理吗?
谢谢!
发布于 2018-08-01 07:10:55
您只需要使用TIdHTTP.ProxyParams本身,并确保为您请求的协议方案(HTTPS)分配正确的HTTPS:
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-derived组件显式地分配给TransparentProxy属性(而不是),则属性getter将创建默认的TIdSocksInfo组件。在这种情况下,您不希望使用SOCKS代理,而且TIdCustomTransparentProxy.Enabled属性是启用TIdSocksInfo的错误方式,因此必须使用TIdSocksInfo.Version属性。
https://stackoverflow.com/questions/51626590
复制相似问题