2

我正在尝试将 Google API PHP Client 库用于 Google Analytic v3。

我能够运行我在家里编写的简单应用程序,但是当我在办公室尝试时它不起作用。当我运行程序时,我被要求将 php 应用程序授权给我的谷歌帐户。允许访问后,我得到

Google_IOException: HTTP Error: (0) could not connect to host in C:\wamp\www\google\GoogleClientApi\io\Google_CurlIO.php on line 128

有必要连接到我组织的代理服务器。有谁知道如何使用 oauth 2 和 php 客户端库连接到代理服务器。

谢谢

下面是我的 php 客户端的代码。

session_start();
require_once dirname(__FILE__).'/GoogleClientApi/Google_Client.php';
require_once dirname(__FILE__).'/GoogleClientApi/contrib/Google_AnalyticsService.php';

$scriptUri = "http://".$_SERVER["HTTP_HOST"].$_SERVER['PHP_SELF'];

$client = new Google_Client();
$client->setAccessType('online'); // default: offline
$client->setApplicationName('My Application name');
//$client->setClientId(''); omitted for privacy
//$client->setClientSecret(''); omitted for privacy
$client->setRedirectUri($scriptUri);
//$client->setDeveloperKey(''); // API key omitted for privacy

// $service implements the client interface, has to be set before auth call
$service = new Google_AnalyticsService($client);

if (isset($_GET['logout'])) { // logout: destroy token
    unset($_SESSION['token']);
die('Logged out.');
}

if (isset($_GET['code'])) { // we received the positive auth callback, get the token     and store it in session
$client->authenticate();
$_SESSION['token'] = $client->getAccessToken();
}

if (isset($_SESSION['token'])) { // extract token from session and configure client
    $token = $_SESSION['token'];
    $client->setAccessToken($token);
}

if (!$client->getAccessToken()) { // auth call to google
    $authUrl = $client->createAuthUrl();
    header("Location: ".$authUrl);
    die;
}

echo 'Hello, world.';
4

4 回答 4

5

只需添加(因为我无法在 google 中找到任何结果),如果您想避免编辑库本身,您可以通过 $client 对象指定额外的 curl 参数。这样做的代码大致如下。

$client = new Google_Client();
$client->getIo()->setOptions(array(
    CURLOPT_PROXY => 'myproxy.mywebsite.com',
    CURLOPT_PROXYPORT => 8909
));
于 2014-10-29T11:32:51.397 回答
2

您必须在 curl 中配置代理设置。检查 Google_CurlIO.php 以获取调用curl_exec($ch).

您可能需要事先添加一些类似于:

curl_setopt($ch, CURLOPT_PROXY, '你的代理服务器');

于 2013-06-11T17:00:14.393 回答
2

v2.0.0 更新

$client = new Google_Client();
$httpClient = $client->getHttpClient();
$httpClient->setDefaultOption("proxy", "http://{$proxyUser}:{$proxyPass}@{$proxyAddress}:{$proxyPort}");
于 2016-10-10T13:29:56.110 回答
0

2.2.0 版更新

该库使用 Guzzle 读取环境变量以自动设置(或不设置)代理(请参阅 GuzzleHttp\Client 类)第 177 行:

    if ($proxy = getenv('HTTPS_PROXY')) {
        $defaults['proxy']['https'] = $proxy;
    }

我假设您需要一个 HTTPS 代理,因为 Google OAuth 不能通过简单的 HTTP 工作。

只需添加

putenv('HTTPS_PROXY=myproxy.mywebsite.com:8909');

它自己工作。

于 2017-10-02T06:47:40.607 回答