阿丹:
这一段接触了项目有比较严谨和复杂的业务需要文件的对接。这会让办公体验很糟糕,于是想到使用百度网盘来将文件存在云端。
首先要进行注册
创建成功我们就会获得一个
这些密钥信息和基本信息就是用来连接咱们的这个应用的关键。
阿丹:推荐使用授权码来接受授权
百度网盘开放平台
根据流程来获取。
阿丹提示:
之前在使用另外一个百度官方的api接口文档的时候发现里面在构建一会的请求的时候会出现无法构建的问题。基本上是说咱们的应用没有权限等。如果出现这个错误使用我上面给的连接,使用这个文档按照步骤在去访问就没有问题。
主要流程就是通过下面构建的请求拿到一个Code,然后使用这个code去换取Access Token来进行文件的上传操作。
http://openapi.baidu.com/oauth/2.0/authorize?
response_type=code&
client_id=您应用的AppKey&
redirect_uri=您应用的授权回调地址&
scope=basic,netdisk&
device_id=您应用的AppID
以上链接示例中参数仅给出了必选参数,其中device_id为硬件应用下的必选参数。
关于应用的相关信息,您可在控制台,点进去您对应的应用,查看应用详情获得。
将这个链接中的参数等进行构建,根据自己的应用来完成
阿丹小贴士:
redirect_uri=您应用的授权回调地址&这个参数是使用成功后要进行回调的地址,如果有需要的话要进行配置,具体配置在下面点击进入可以查看文档。授权回调地址 http://developer.baidu.com/wiki/index.php?title=docs/oauth/redirect
如果不需要构建这个地址的时候就使用官方默认的参数即可“oob”,使用oob
redirect_uri=oob&就可以了。
GET https://openapi.baidu.com/oauth/2.0/token?
grant_type=authorization_code&
code=用户授权码 Code 值&
client_id=您应用的AppKey&
client_secret=您应用的SecretKey&
redirect_uri=您应用设置的授权回调地址
以上链接示例中参数仅给出了必选参数。
关于应用的相关信息,您可在控制台,点进去您对应的应用,查看应用详情获得。
根据我们获得的信息来构建连接,其实就是使用我们这个刚获取的code来换取一个可以进行使用的Access Token。
我们对我们的连接进行了访问,可拿到返回值。是一个JSON形式的返回值来包装的。里面包含了我需要的token.
使用文档下面的案例就能在代码中进行使用这些功能。
java案例演示
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpGetRequestExample {
public static void main(String[] args) {
try {
URL url = new URL("https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=d5a53cd0ca7799d033399487b23ec992&client_id=EVaI5x0U6lEmP125G0Su55ROEXZtItdD&client_secret=VPgfmrt8UBM5kgkeUemwRVmr5AjhFuEV&redirect_uri=oob");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
System.out.println(e);
}
}
}
python案例演示
import requests
url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=d5a53cd0ca7799d033399487b23ec992&client_id=EVaI5x0U6lEmP125G0Su55ROEXZtItdD&client_secret=VPgfmrt8UBM5kgkeUemwRVmr5AjhFuEV&redirect_uri=oob"
payload = {}
headers = {
'User-Agent': 'pan.baidu.com'
}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
响应示例:
{
expires_in: 2592000,
refresh_token: "122.2959fe0da8c91d522099c5dca1b5608f.YDUwKsc1DS89VaP2DogevEN15cD65vXLtZ7bHHe.DbEWAW",
access_token: "121.fd4b4277dba7a65a51cf370d0e83f567.Y74pa1cYlIOT_Vdp2xuWOqeasckh1tWtxT9Ouw5.LPOBOA",
session_secret: "",
session_key: "",
scope: "basic netdisk"
}
其中可以拿到access_token,另外注意也可以拿到refresh_token、expires_in等值。
到这里就已经拿到了Access Token,完成了一次授权。
重点参数:
我们可以看到上面有一个返回值refresh_token是因为Access Token是会过期的。
我们可以根据我们上面获得的refresh_token来进行对AccessToken的刷新
官方提供了这个链接,告诉我们可以使用
refresh_token=Refresh Token的值&
来获取刷新的Access Token
GET https://openapi.baidu.com/oauth/2.0/token?
grant_type=refresh_token&
refresh_token=Refresh Token的值&
client_id=您应用的AppKey&
client_secret=您应用的SecretKey
以上链接示例中参数仅给出了必选参数。
关于应用的相关信息,您可在控制台,点进去您对应的应用,查看应用详情获得。
关于 Refresh Token的值,在换取 Access Token 凭证时,您可在响应信息中拿到。
java示例;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpGetRequestExample {
public static void main(String[] args) {
try {
URL url = new URL("https://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token=122.2959fe0da8c91d522099c5dca1b5608f.YDUwKsc1DS89VaP2DogevEN15cD65vXLtZ7bHHe.DbEWAW&client_id=EVaI5x0U6lEmP125G0Su55ROEXZtItdD&client_secret=VPgfmrt8UBM5kgkeUemwRVmr5AjhFuEV");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
System.out.println(e);
}
}
}
python示例
import requests
url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token=122.2959fe0da8c91d522099c5dca1b5608f.YDUwKsc1DS89VaP2DogevEN15cD65vXLtZ7bHHe.DbEWAW&client_id=EVaI5x0U6lEmP125G0Su55ROEXZtItdD&client_secret=VPgfmrt8UBM5kgkeUemwRVmr5AjhFuEV"
payload = {}
headers = {
'User-Agent': 'pan.baidu.com'
}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
响应示例:
{
expires_in: 2592000,
refresh_token: "122.51265f007055bc895cb02c639410a90d.YDLFcE2nee3Cyu-Bsn7SAFVCAfdCkvSm4EnCdkO.Zs_FiQ",
access_token: "121.60bf4c9911cb554aac39a1c701a4dae8.YDjwYds0zFgbM1rifQhjMLwsfb6xYus5tUhNEoA.XNNoOQ",
session_secret: "",
session_key: "",
scope: "basic netdisk"
}