Indy 10 HTTPS代理

时间:2018-08-01 06:22:39

标签: http delphi https proxy indy

我这里有一个小程序,该程序使用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代理吗?

谢谢!

1 个答案:

答案 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>