我想写一个函数,我可以上传,下载和删除文件从我的谷歌驱动器使用curl在php。因此,我必须在上传任何文件之前获得访问令牌。我所面临的麻烦是,我得到了我的刷新令牌,我确实启用了我的gdrive api,但我不知道CURLOPT_URL, CURLOPT_POSTFIELDS和CURL_HTTPHEADER应该是什么。下面的代码显示了我要做的事情:
<?php
$post = array("grant_type" => "refresh_token",
"client_id" => "MYCLIENT",
"client_secret" => "MYCLIENTSECRET",
"refresh_token" => "MYREFRESHTOKEN",
"Content-length" => "163");
$header = array("Content-type" => "application/x-www-form-urlencoded",
"Content-length" => "163");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "www.googleapis.com/oauth2/v4/token");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POST, $post);
$output = curl_exec($curl);
curl_close($curl);
print $output;
?>
它一直告诉我"411。这是一个错误。POST请求需要一个内容长度的报头。这就是我们所知道的。"但是,我已经在post字段和header中设置了内容长度,所以我认为问题可能是其他的。
如何在没有用户干预的情况下授权应用程序(web或安装)?(规范的?),特别是对https://developers.google.com/identity/protocols/OAuth2WebServer#offline
是。错误411意味着您必须提供内容长度HTTP报头。此错误没有响应体。尝试从头部数组中删除Content-Length部分。
//remove following $header[] = 'Content-Length: ' . $length;
从这个SO线程,cURL自动添加它。所以你不需要发送那个。