【Java示例】如何获取AccessToken
用户已被禁言 发布于2017-11 浏览:24835 回复:21
9
收藏
  • 好多新注册的开发者表示不太清楚如何获取AccessToken。首先还是建议大家看官网文档

http://ai.baidu.com/docs#/Begin/top

  • 小帅帮大家写一个Java调用的示例
  • 首先是创建了应用。并得知APIKEY SECRETKEY 

  • 代码准备工作。先下载官网的HTTPUTIL工具类 稍做改动

下载地址:https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3

package com.xiaoshuai.baidu.util;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

/**
 * http 工具类
 */
public class HttpUtil {

    public static String post(String requestUrl, String accessToken, String params) throws Exception {
        String generalUrl = requestUrl + "?access_token=" + accessToken;
        URL url = new URL(generalUrl);
        // 打开和URL之间的连接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        // 设置通用的请求属性
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setUseCaches(false);
        connection.setDoOutput(true);
        connection.setDoInput(true);

        // 得到请求的输出流对象
        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
        out.writeBytes(params);
        out.flush();
        out.close();

        // 建立实际的连接
        connection.connect();
        // 获取所有响应头字段
        Map> headers = connection.getHeaderFields();
        // 遍历所有的响应头字段
        for (String key : headers.keySet()) {
            System.out.println(key + "--->" + headers.get(key));
        }
        // 定义 BufferedReader输入流来读取URL的响应
        BufferedReader in = null;
        if (requestUrl.contains("nlp"))
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));
        else
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        String result = "";
        String getLine;
        while ((getLine = in.readLine()) != null) {
            result += getLine;
        }
        in.close();
        System.out.println("result:" + result);
        return result;
    }
    //看这里。是修改过后获取AccessToken的方法。POST/GET都可以
    public static String postToken(String requestUrl,String params) throws Exception {
        String generalUrl = requestUrl;
        URL url = new URL(generalUrl);
        // 打开和URL之间的连接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        // 设置通用的请求属性
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setUseCaches(false);
        connection.setDoOutput(true);
        connection.setDoInput(true);

        // 得到请求的输出流对象
        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
        out.writeBytes(params);
        out.flush();
        out.close();

        // 建立实际的连接
        connection.connect();
        // 获取所有响应头字段
        Map> headers = connection.getHeaderFields();
        // 遍历所有的响应头字段
        for (String key : headers.keySet()) {
            System.out.println(key + "--->" + headers.get(key));
        }
        // 定义 BufferedReader输入流来读取URL的响应
        BufferedReader in = null;
        if (requestUrl.contains("nlp"))
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));
        else
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        String result = "";
        String getLine;
        while ((getLine = in.readLine()) != null) {
            result += getLine;
        }
        in.close();
        System.out.println("result:" + result);
        return result;
    }
}
  • 直接main函数获取AccessToken
package com.xiaoshuai.baidu.auth;

import com.xiaoshuai.baidu.util.HttpUtil;

/**
 * @author 小帅丶
 * @类名称  BDToken
 * @remark 
 * @date  2017-11-13
 */
public class BDToken {
	/**
	 * 获取百度AI的AccessToken
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		/**
		 * 应用如何创建URL http://ai.baidu.com/docs#/Begin/top 这里是图文教程的哦。
		 */
		//在控制台复制自己应用的  API Key
		String APIKEY = "";
		//在控制台复制自己应用的 Secret Key
		String SECRETKEY = "";
		String url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=APIKEY&client_secret=SECRETKEY";
		String requsetURL = url.replaceAll("APIKEY",APIKEY).replaceAll("SECRETKEY",SECRETKEY);
		System.out.println(requsetURL);
		String jsonObject = HttpUtil.postToken(requsetURL,"");
		System.err.println(jsonObject);
	}
}
  • 替换了相关参数 运行即可
{
    "access_token": "24.397e884bd79b47632ad69ee47e0deb5b.2592000.1513130665.282335-10347832", 
    "session_key": "9mzdCP0Ce6jlSq5BCXG7VNqiTHCFeksfqnGWA1dMDhBxF4PZt4nbnnXv/NWGscOB6nvQFax2s12ziuakwxlxQoxJvo6paw==", 
    "scope": "public vis-faceverify_faceverify vis-faceattribute_faceattribute vis-faceverify_faceverify_v2 vis-faceverify_faceverify_match_v2 brain_all_scope vis-faceverify_vis-faceverify-detect wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test权限 vis-classify_flower bnstest_fasf", 
    "refresh_token": "25.59c39518c00811b9f7352625371a1753.315360000.1825898665.282335-10347832", 
    "session_secret": "b837a61fba5df4f7182336d1b8963b96", 
    "expires_in": 2592000
}

以上就是Java获取AccessToken的示例 不错记得点赞哦

收藏
点赞
9
个赞
共21条回复 最后由用户已被禁言回复于2021-08
#23用户已被禁言回复于2021-08
#21 liu784808910回复
您好,需要用户的api的token怎么获取

用户是指什么意思呢?可以加Q:783021975 或者百度AI右上角控制台登录提交工单咨询百度官方人员

0
#21liu784808910回复于2021-08

您好,需要用户的api的token怎么获取

1
#20用户已被禁言回复于2020-08
#19 About_Dc回复
乱码了咋整啊

没有中文呀。请求token返回的都是英文字母字符。

啥语言请求乱码了?返回的内容是什么呢?即使是乱码的 你也发出来。

再不济这个接口是支持get请求的。只要有浏览器在浏览器访问也是可以获取到的。都不需要写代码的。

1
#19About_Dc回复于2020-08

乱码了咋整啊

0
#18万年老妖蛟龙2回复于2019-07
#2 用户已被禁言回复
更简单的方式。不需要写代码的 https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=APIKEY&client_secret=SECRETKEY  把APIKEY SECRETKEY 替换成自己应用的信息后。 把URL复制到浏览器地址栏回车即可 [图片]
展开

厉害,解决了当务之急,多谢!

0
#17用户已被禁言回复于2019-06
#16 asdfaasdf摩羯回复
没人报401吗?

确保值正确。在浏览器地址栏输入 回车也是能得到的。成功失败接口服务会返回JSON格式内容。您说的401是接口给的JSON格式字符串吗?最好问题明细描述。例如代码 截图 错误原文信息等。

0
#16asdfaasdf摩羯回复于2019-06

没人报401吗?

0
#15lcsedHE回复于2018-03

谢大佬!!!  你提供的代码demo真的6666 !!! 

0
#14用户已被禁言回复于2018-03
#13 lcsedHE回复
我们语言处理基础技术 是哪个qq群啊 大佬们  想看看有没有文章标签类的相关文章
展开
百度语音:464413749 文字识别:631977213 人脸识别:282744268 图像审核:375765194 图像识别:649285136 定制化图像识别:185289236 图像搜索:630770006 视频分析:632473158 百度AR:472081119 自然语言:632426386 文本审核:484776967 UNIT:584835350 百度翻译:214857706 数据智能:650596829 知识图谱:655854786 DuerOS:604592023 百度AI开放平台:224994340
1
#13lcsedHE回复于2018-03

我们语言处理基础技术 是哪个qq群啊 大佬们  想看看有没有文章标签类的相关文章

0
#12用户已被禁言回复于2017-11
#11 笔墨哥回复
这样就很平易近人,容易懂啦~

嗯嗯

1
#11笔墨哥回复于2017-11
#9 用户已被禁言回复
主要有的人复制了官网文档也不会。我只能打个样了

这样就很平易近人,容易懂啦~

1
#10荒墨丶迷失回复于2017-11
#9 用户已被禁言回复
主要有的人复制了官网文档也不会。我只能打个样了

嗯 确实是的 hhh~这样就可以快速用起来了

0
#9用户已被禁言回复于2017-11
#8 荒墨丶迷失回复
直接把API文档复制过来嘛 ~ 哈哈哈

主要有的人复制了官网文档也不会。我只能打个样了

0
#8荒墨丶迷失回复于2017-11

直接把API文档复制过来嘛 ~ 哈哈哈

0
#7用户已被禁言回复于2017-11
  • 官网地址http://ai.baidu.com/docs#/Auth/top中的示例代码一点问题也木有
/**
 * @Company 小帅丶科技  
 * @department 瞎搞组
 * @author 小帅丶
 */
package com.xiaoshuai.baidu.auth;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
/**
 * @author 小帅丶
 * @类名称  AuthService
 * @remark 
 * @date  2017-11-17
 */
public class AuthService {
	public static void main(String[] args) {
		getAuth();
	}
	 /**
     * 获取权限token
     * @return 返回示例:
     * {
     * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
     * "expires_in": 2592000
     * }
     */
    public static String getAuth() {
        // 官网获取的 API Key 更新为你注册的
        String clientId = "";
        // 官网获取的 Secret Key 更新为你注册的
        String clientSecret = "";
        return getAuth(clientId, clientSecret);
    }

    /**
     * 获取API访问token
     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
     * @param ak - 百度云官网获取的 API Key
     * @param sk - 百度云官网获取的 Securet Key
     * @return assess_token 示例:
     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
     */
    public static String getAuth(String ak, String sk) {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2. 官网获取的 API Key
                + "&client_id=" + ak
                // 3. 官网获取的 Secret Key
                + "&client_secret=" + sk;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 获取所有响应头字段
            Map> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String result = "";
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            /**
             * 返回结果示例
             */
            System.out.println("接口返回的json字符串:" + result);
            JSONObject jsonObject = new JSONObject(result);
            String access_token = jsonObject.getString("access_token");
            System.out.println("获取到的AccessToken的值:"+access_token);
            return access_token;
        } catch (Exception e) {
            System.err.printf("获取token失败!");
            e.printStackTrace(System.err);
        }
        return null;
    }

}
  • 返回的数据示例
{
    "access_token": "24.81f5852f94ae50adc6d464fdc99a7c59.2592000.1513493154.282335-9999999", 
    "session_key": "9mzdA5uPapXEYQVqn5lAz8U+aUb/lDSCvtPyjx/7+ldpXe49huoM1M7XOSqshfrFCHGQWF722kfkpGr152J+/XEzod+0", 
    "scope": "vis-classify_animal vis-classify_plant brain_animal_classify brain_plant_classify vis-classify_general vis-classify_dishes vis-classify_car brain_dish_detect brain_car_detect vis-ocr_lottery vis-ocr_formula vis-ocr_business_license brain_ocr_business_license public vis-ocr_ocr brain_ocr_scope brain_ocr_general brain_ocr_general_basic brain_ocr_general_enhanced brain_ocr_webimage brain_all_scope brain_ocr_idcard brain_ocr_driving_license brain_ocr_vehicle_license vis-ocr_plate_number brain_solution brain_ocr_plate_number brain_ocr_accurate brain_ocr_accurate_basic brain_ocr_receipt wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test权限 vis-classify_flower bnstest_fasf lpq_开放", 
    "refresh_token": "25.eafed048ed1f7c3aebb9198d0a736672.315360000.1826261154.282335-9999999", 
    "session_secret": "5a666a9431333d98ea78053a8d4b5341", 
    "expires_in": 2592000
}
1
#6goJhou回复于2017-11

顶一个

0
#5笔墨哥回复于2017-11
#4 用户已被禁言回复
写了现成的代码。也不记得大家就会用。真不知道现在人的技术水平水分有多少
展开

还是很有水分滴

0
#4用户已被禁言回复于2017-11
#3 笔墨哥回复
哇,这个教程很省心呢~棒棒滴~

写了现成的代码。也不记得大家就会用。真不知道现在人的技术水平水分有多少

1
#3笔墨哥回复于2017-11

哇,这个教程很省心呢~棒棒滴~

0
TOP
切换版块