google/cloud-bigquery 1.39.3 中负责 REST 投递和令牌请求的钩子可以共用一个感知代理的 PSR 请求处理器:

$proxy = 'http://proxy.example:8080';
$http = new \GuzzleHttp\Client();
$send = static function (
    \Psr\Http\Message\RequestInterface $request,
    array $options = []
) use ($http, $proxy) {
    $options['proxy'] = $proxy;
    return $http->send($request, $options);
};

$bigQuery = new \Google\Cloud\BigQuery\BigQueryClient([
    'projectId' => $projectId,
    'httpHandler' => $send,
    'authHttpHandler' => $send,
]);

该 callable 会为每个请求设置 Guzzle 的 proxy 选项,包括从HTTP 代理列表中选出的公共 HTTP 端点;构造函数把这个 callable 同时交给 httpHandler 和 authHttpHandler。这样既覆盖 REST 投递,也覆盖使用该钩子的认证请求。请保留受支持的凭据配置;如果凭据使用其他传输层,也需要检查那条链路。

通过 Guzzle 支持的代理配置补充必要的直连例外。请把 BigQuery API 端点保留为服务目的地:在 apiEndpoint 中填入代理地址会选中另一个服务,而不是配置这条路由。

这些是 BigQueryClient 的构造函数选项。它们既不会配置独立的 gRPC 通道,也不对应于独立库 Google API PHP Client 中 Google\Client 的 setHttpClient 接口。

相关文章