我创建了一个PHP脚本来从我的Google Cloud Platform帐户检索一些数据。以下是我的操作方式:
<?php
require __DIR__ . '/vendor/autoload.php';
use Google\Cloud\BigQuery\BigQueryClient;
putenv('GOOGLE_APPLICATION_CREDENTIALS=key.json');
$projectId = 'xxxxx';
$datasetId = 'xxxxxx';
$table = 'xxxxx';
$bigQuery = new BigQueryClient([
'projectId' => $projectId
]);
// etc...
一切都可以在本地计算机(WAMP)上正常运行,但是当我将脚本迁移到公司生产环境时,就会出现问题:
致命错误:未捕获的异常 带有消息“ cURL”的“ Google \ Cloud \ Core \ Exception \ ServiceException” 错误6:无法解析主机“ www.googleapis.com”
事实上,我没有收到此消息,因为每次使用Curl时,我都需要设置公司的代理信息:
<?php
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($curl, CURLOPT_PROXY, 'xxx.xxx.xxx.xxx');
顺便说一句,我100%确定googleapis.com被我们的代理服务器列入白名单...但是如何使用BigQueryClient
呢?我在官方文档中进行搜索,无法找到使用代理的方法。
答案 0 :(得分:0)
我会尝试将这些构造盲目地传递给连接构建器类之一,希望有人能学会这一点
'restOptions' => [
'proxy', 'xxx.xxx.xxx.xxx'
]
另一方面,如果有跟踪日志,则可以查看是否使用了Guzzle或其他工具。考虑在以下位置打开问题跟踪:https://github.com/GoogleCloudPlatform/google-cloud-php/issues
答案 1 :(得分:0)
Bigquery使用www.googleapis.com作为其endpoint。 命令行说明中有global flags,用于指定有关代理使用的地址,密码,端口和用户名,但是,对于客户端库,您需要与基础架构团队一起验证访问权限。
答案 2 :(得分:0)
在使用BigQueryClient之前,请使用php的putenv()设置代理。
putenv('HTTPS_PROXY=192.168.1.1:8080');
答案 3 :(得分:0)
use Google\Cloud\BigQuery\BigQueryClient;
use GuzzleHttp\Client;
use Psr\Http\Message\RequestInterface;
$guzzleClient = new Client();
$config = [
'projectId' => 'xxx',
'keyFilePath' => 'key_path',
'restOptions' => [
'proxy' => 'xxx.xxx.xxx.xxx:xx'
],
'authHttpHandler' => function (RequestInterface $request, array $options = []) use ($guzzleClient) {
return $guzzleClient->send(
$request,
$options + [
'proxy' => 'xxx.xxx.xxx.xxx:xx'
]
);
}
];
$bigQueryClient = new BigQueryClient($config);
它对我适用于php库google / cloud-bigquery版本1.8.0