0

我正在开发一个动态网站,该网站严重依赖 ajax 调用。我注意到,当我在首页加载并尝试访问此页面上的主搜索框时,需要 5-7 秒才能完成填充主搜索框的 ajax 请求。我已经设法弄清楚延迟是由 Google API PHP 库引起的,它在我的页面的 HTML 加载后立即启动,以尝试对访问用户进行身份验证。我已经对脚本进行了部分基准测试,并发现问题出在库的“verifyIdToken”方法中,完成该方法大约需要 5 秒。

我注意到在文档和教程中,谷歌说:“该库将自动下载并缓存验证所需的证书,如果它已过期则刷新它。”

有谁知道:

  • 这是这个方法的正常行为,它应该花这么长时间来执行吗?
  • 缓存是标准行为,还是我必须将其设置在某个地方才能实际缓存所需的数据?
  • 如果这是标准行为,我如何检查缓存是否真的发生了?

这是我正在处理的完整代码,也许有人在其中发现了错误:

$client_id='xxxxxx';
$client_secret='xxxxxxxx';

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setApplicationName("Converser Google API");
$client->addScope('https://www.googleapis.com/auth/plus.me');
$client->addScope('https://www.google.com/m8/feeds');
$client->addScope('https://mail.google.com/');
$client->addScope('email');
$client->setRedirectUri('postmessage');
$client->setAccessType("offline");
$client->setApprovalPrompt("force");

if (!isset($_SESSION['google-api']['access_token'])) {
    if (isset($_REQUEST['code'])) g_exchangeCode($_REQUEST['code']);
    else g_kill(0);
} else {
    $accessToken=$_SESSION['google-api']['access_token'];
    $client->setAccessToken($accessToken);
    $returnData['auth_by']='token';
}
if($client->isAccessTokenExpired()) {
    if (isset($_REQUEST['gid']) && !empty($_REQUEST['gid'])) g_refreshToken($_REQUEST['gid']);
    else if (isset($_REQUEST['code']) && !empty($_REQUEST['code'])) g_exchangeCode($_REQUEST['code']);
    else g_kill(1);
}
$token_data = $client->verifyIdToken()->getAttributes();
4

1 回答 1

0

它是由 ipv6 引起的,您需要使用 ipv4 否则会出现此错误

提交允许通过设置 cURL 选项setClassConfig。设置它应该可以解决它。
'CURLOPT_IPRESOLVE', 'CURL_IPRESOLVE_V4' 如果您使用的是 master 分支而不是 checkout this

于 2016-05-25T16:46:02.757 回答