You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi FMX的TChromium中添加带授权的代理?

在Delphi FMX的TChromium中配置带授权认证的代理

嘿,我完全懂你的困扰——TChromium组件本身确实没有直接暴露代理设置的属性,得深入它基于的CEF(Chromium Embedded Framework)框架来实现。下面是一套经过验证的实现方案,分步骤来:

1. 创建自定义的请求上下文处理类

要处理代理的授权认证,我们需要继承TCefRequestContextHandler并重写GetAuthCredentials方法,这个方法会在CEF检测到代理需要认证时被调用。

type
  TCustomRequestContextHandler = class(TCefRequestContextHandler)
  protected
    function GetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame;
      isProxy: Boolean; const host: ustring; port: Integer; const realm: ustring;
      const scheme: ustring; const callback: ICefAuthCallback): Boolean; override;
  end;

function TCustomRequestContextHandler.GetAuthCredentials(const browser: ICefBrowser;
  const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer;
  const realm: ustring; const scheme: ustring; const callback: ICefAuthCallback): Boolean;
begin
  Result := True; // 表示我们要处理这个认证请求
  // 替换成你的代理用户名和密码
  callback.Continue('your_proxy_username', 'your_proxy_password');
end;

2. 配置代理服务器并关联处理类

接下来,在TChromium初始化的时候,我们需要设置代理服务器地址,并把上面的自定义处理类绑定到请求上下文。通常可以在Form的OnCreate事件或者TChromium的OnBeforeCommandLineProcessing事件中做这件事:

procedure TForm1.FormCreate(Sender: TObject);
var
  RequestContextSettings: TCefRequestContextSettings;
  CustomHandler: TCustomRequestContextHandler;
begin
  // 初始化CEF(如果还没初始化的话,注意要在程序启动时先调用GlobalCEFApp.StartMainProcess)
  if not GlobalCEFApp.StartMainProcess then
    Exit;

  // 创建请求上下文设置
  RequestContextSettings := TCefRequestContextSettings.Create;
  try
    // 设置代理服务器,格式:http://代理地址:端口
    RequestContextSettings.ProxyServer := 'http://192.168.1.100:8080';
    
    // 创建自定义处理类实例
    CustomHandler := TCustomRequestContextHandler.Create;
    
    // 为TChromium设置自定义请求上下文
    Chromium1.RequestContext := TCefRequestContext.Create(RequestContextSettings, CustomHandler);
  finally
    RequestContextSettings.Free;
  end;

  // 加载目标页面
  Chromium1.Load('https://www.example.com');
end;

3. 关键注意事项

  • CEF版本兼容性:确保你使用的Delphi CEF组件(比如DCEF3或者CEF4Delphi)版本是最新的,不同版本的API可能有细微差异,但核心逻辑一致。
  • 代理格式:代理地址必须包含协议(http://或socks://),否则CEF可能无法正确识别。
  • 认证回调时机:GetAuthCredentials只有在代理服务器返回407需要认证时才会被触发,如果你的代理不需要认证,可以跳过自定义处理类,直接设置ProxyServer即可。
  • 内存管理:自定义处理类的生命周期会由CEF自动管理,无需手动调用Free,避免内存泄漏。

如果遇到问题,可以通过GlobalCEFApp.LogFile设置CEF日志路径,日志会详细记录代理配置和认证的过程,方便排查问题。

内容的提问来源于stack exchange,提问作者FirmFreez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:59:16