我正在使用ClientLogin方法和cURL登录到Google API。这很好用,我收到了一个用于进一步使用的令牌。现在,我可以通过使用此令牌来查询docs.google.com。
$curl = curl_init();
$headers = array(
"Authorization: GoogleLogin auth=" . $auth,
"GData-Version: 3.0",
);
curl_setopt($curl, CURLOPT_URL, "https://docs.google.com/feeds/default/private/full");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
curl_close($curl);
这个代码可以很好地运行,我可以得到我在Google文档中所有可用文档的列表。但是如果我使用从API文档获取的URL尝试在spreadsheets.google.com上执行相同的查询:
https://spreadsheets.google.com/feeds/spreadsheets/private/full
我收到了一个401错误,表示使用的令牌无效。我在两种情况下都使用相同的令牌和查询。我需要为谷歌表格API使用不同的令牌吗?
编辑: 这是我请求令牌的方式:
$clientlogin_url = "https://www.google.com/accounts/ClientLogin";
$clientlogin_post = array(
"accountType" => "HOSTED_OR_GOOGLE",
"Email" => "my email",
"Passwd" => "my password",
"service" => "writely",
"source" => "my application name"
);
$curl = curl_init($clientlogin_url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clientlogin_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
preg_match("/Auth=([a-z0-9_-]+)/i", $response, $matches);
$auth = $matches[1];
curl_close($curl);