如果我理解正确,您希望整个过程都是自动化的,因此不需要用户登录(即运行脚本并上传文件)。
嗯,这是可能的。我是一名新手开发人员,如果我没有使用正确的术语,请原谅。
无论如何,可以通过使用cURL来实现这一点。
首先,您需要定义一些变量,例如您的用户凭据(用户名和密码),由Box提供的客户端ID和客户端密钥(在您的应用程序中找到),以及您的重定向URI和状态(如果我理解正确,则用于额外的安全性)。
oAuth2.0是一个4步身份验证过程,您需要逐步完成每个步骤。
第一步将是设置一个curl实例:
curl_setopt_array($curl, array(
CURLOPT_URL => "https://app.box.com/api/oauth2/authorize",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "content-type: application/x-www-form-urlencoded",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>
"response_type=code&client_id=".$CLIENT_ID."&state=".$STATE,
));
这将返回一个带有请求令牌的html文本,您需要它作为下一步操作所需,因此我会将整个输出保存到变量中并使用请求令牌(标签具有
"name"="request_token"
和
"value"
是实际令牌)进行筛选。
下一步,您需要向相同的url发送另一个curl请求,这次post字段应包括请求令牌、用户名和密码,如下所示:
CURLOPT_POSTFIELDS => "response_type=code&client_id=".$CLIENT_ID."&state=".$STATE."&request_token=".$REQ_TOKEN."&login=".$USER_LOGIN."&password=".$PASSWORD
此时您还应该设置一个cookie文件:
CURLOPT_COOKIEFILE => $COOKIE, (where $COOKIE is the path to the cookie file)
这将返回另一个HTML文本输出,使用相同的方法来获取名称为"ic"的令牌。
接下来,您需要向同一URL发送POST请求。它应该包括以下postfields:
response_type=code&client_id=".$CLIENT_ID."&state=".$STATE."&redirect_uri=".$REDIRECT_URI."&doconsent=doconsent&scope=root_readwrite&ic=".$IC
确保将curl请求设置为使用之前设置的cookie文件,如下所示:
CURLOPT_COOKIEFILE => $COOKIE,
并在请求中包含头文件:
CURLOPT_HEADER => true,
在这一步(如果由浏览器执行),您将被重定向到一个URL,它看起来像上面描述的那样:
http://0.0.0.0(*redirect uri*)/?state=[box-generated_state_security_token]&code=[SOME_CODE] and note the "code=" value.
获取"code"
的值。
最后一步!
向https//app.box.com/api/oauth2/token发送一个新的cur请求。这应该包括以下字段:
CURLOPT_POSTFIELDS => "grant_type=authorization_code&code=".$CODE."&client_id=".$CLIENT_ID."&client_secret=".$CLIENT_SECRET,
这将返回一个包含“访问令牌”,“过期时间”和“刷新令牌”的字符串。这些是上传所需的令牌。在此处阅读有关使用它们的信息:
https://box-content.readme.io/reference#upload-a-file
希望这对您有所帮助。
附注:
我故意分开了 https(Stackoverflow 不允许我发布超过 1 个 URL 的答案:D)
这是针对 PHP cURL 的。也可以使用 Bash cURL 进行相同操作。