3

プロキシ設定 Ip:Port を Chromium Embedded に手動で設定する方法。IEに設定した場合のように、グローバルではなくコントロールのみに影響します。

ありがとう

4

3 に答える 3

1

--proxy-serverCEF 3 では、コマンド ライン スイッチを使用できます。値の例はsocks5://127.0.0.1:8888. でプログラム的に設定できますCefApp::OnBeforeCommandLineProcessing。このコールバック名に設定する場合、--プレフィックスを含めないでください。

于 2014-08-12T07:09:13.607 に答える
0
uses ceflib;

procedure AppCefGetProxyForUrl(const url: ustring; var proxyType: TCefProxyType;
  var proxyList: ustring );
begin
  proxyType := CEF_PROXY_TYPE_NAMED;
  proxyList := 'ip:port';
end;

initialization
  CefGetProxyForUrl := @AppCefGetProxyForUrl;

end.
于 2013-08-08T10:07:05.537 に答える
0

以前に存在したクラスCefProxyHandlerを使用して、より優れた制御を取得できます。
最新の実装では、コマンド ライン フラグのみを使用します (これらは劣っていることがわかりました)。以前のコードは CEF の古い SVN ブランチにあります。

私はこの方法で実装しました (以下は Windows での C++ の指示です。上記の URL から読み取ることができるため、多くのコードは貼り付けません)。 -他の CEF クラスの例 (CefApp など) に従って、
エクスポートされたCefProxyHandlerクラスを実装します。クラスには単一のメソッドGetProxyForUrl
があります - cef_types.h でcef_proxy_type_t列挙 (直接、名前付き、PAC) とcef_proxy_info_t構造体 (型と文字列リストを含む)
を定義します - cef_types_wrappers.h でcef_proxy_info_tに対するCefProxyInfoTraitsを定義します(他の構造の例に従ってください) 、およびクラスCefProxyInfo : public CefStructBase
- libcef/browser/browser_main.cc 内PreMainMessageLoopRunはProxyServiceFactory::CreateProxyConfigServiceCefProxyServiceFactory:: CreateProxyConfigService に置き換えます。CefファクトリはCefProxyServiceを作成し、最終的にCefProxyConfigServiceを作成します - src/net/proxy/proxy_config_service_win.cc から着想を得て、クラスCefProxyConfigServiceWinを実装します。主なものは

static void GetCurrentProxyConfig(net::ProxyConfig* config) {
  CefRefPtr<CefApp> app = CefContentClient::Get()->application();
  if(app.get()) {
    CefRefPtr<CefProxyHandler> handler = app->GetProxyHandler();
    if(handler.get()) {
      // ... use handler->GetProxyForUrl etc.
    }
  }

  WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_config = {0};
  if (!WinHttpGetIEProxyConfigForCurrentUser(&ie_config)) {
    LOG(ERROR) << "WinHttpGetIEProxyConfigForCurrentUser failed: " <<
      GetLastError();
    *config = net::ProxyConfig::CreateDirect();
    config->set_source(net::PROXY_CONFIG_SOURCE_SYSTEM_FAILED);
    return;
  }
  SetFromIEConfig(config, ie_config);
  FreeIEConfig(&ie_config);
} 


-古いリリース にあった net::ProxyConfigServiceWin::set_force_auto_detect を再追加
- libcef/browser/url_request_context_getter.cc (古い CEF ブランチからインスパイア) でProxyConfigServiceNull を実装: public net::ProxyConfigService (すべて空の実装)、クラス CefProxyResolver : public net::ProxyResolver (ここにGetProxyForUrlがあります)、およびCefURLRequestContextGetter::GetURLRequestContext()で、次のようなカスタム プロキシ ハンドラをチェックします。

bool fCustomProxyHandler = false;
CefRefPtr<CefApp> app = CefContentClient::Get()->application();
if(app.get()) {
    CefRefPtr<CefProxyHandler> handler = app->GetProxyHandler();
    if(handler.get()) {
    #if defined(OS_WIN)
      // Force auto-detect so the client resolver will be called.
      net::ProxyConfigServiceWin::set_force_auto_detect(true);
    #endif
      // The client will provide proxy resolution.
      storage_->set_proxy_service(
          new net::ProxyService(
                                net::ProxyService::CreateSystemProxyConfigService(io_loop_->message_loop_proxy(), file_loop_), 
                                new CefProxyResolver(handler), 
                                NULL
                               )
      );
      fCustomProxyHandler = true;
    }
}
if(!fCustomProxyHandler) {
    //  custom proxy resolution not provided
    scoped_ptr<net::ProxyService> system_proxy_service;
    system_proxy_service.reset(
        ProxyServiceFactory::CreateProxyService(
            NULL,
            url_request_context_.get(),
            url_request_context_->network_delegate(),
            CefContentBrowserClient::Get()->proxy_config_service().release(),
            command_line));
    storage_->set_proxy_service(system_proxy_service.release());
}

重要なことは、独自の実装を storage_->set_proxy_service に提供することです。最後に行うことは、CefProxyHandler を提供することです (以前のバージョンは、ライフスパン ハンドラー、リクエスト ハンドラーなどと同様に、CefApp または CefClient に追加できます)。上記の例は、CefApp から提供しています。

最新のブランチ (2357、おそらくそれ以下) では、ブラウザー プロセス ハンドラーとアプリがさらに分離されています。必要なのは、使用可能なグローバル コンテキスト ゲッターを介してプロキシ ハンドラー プロバイダー (通常は CefApp) にアクセスし、アプリケーションからプロキシ ハンドラーを直接取得して GetProxyHandler またはブラウザー プロセス ハンドラー (そこにプロキシー ゲッターを追加する予定の場合) を呼び出すことだけです。 CefClient など。その後、GetProxyHandler でアプリにプロキシ設定を簡単にクエリさせることができます (ポスト タスク、Windows の場合は WaitForSingleObject を使用した PostMessage など)。プロキシ サーバー/ポート/ユーザー/パスは GetProxyForUrl 経由で取得されます。

そうすることは簡単ではありませんが、完全な制御を提供します。必要に応じて、 URL ごとにプロキシを処理したり、再起動する必要なく同じブラウザー/レンダラー/プラグイン内で動的に変更したりすることもできます (保留中のダウンロードや、プラグインのストリーミングが影響を受ける可能性があります)。

于 2015-05-09T07:09:06.170 に答える