百度api经历

底部参考文档,欢迎点击:https://www.runoob.com/http/http-content-type.html

这两天遇到了点糟心事,因为小伙伴走了。然后事情起因是这样的,来了个任务封装个百度识别的api,我想这有什么难的,直接动手就干于是乎…

首先看接口文档,发现要求格式如下
在这里插入图片描述
重点是content-Type跟其他别的对接格式不一样啊,这下我要仔细点。

先用postman尝试调用百度开放的接口,发现不能用我们常用的body在这里插入图片描述
需要用form-urlencoded形式
在这里插入图片描述
行吧,那就用这种,就此,问题就埋下了伏笔
我就用了大佬封装的HttpHelper类来调用,写好如下

  Map<String, String> params = new HashMap<>();
  params.put("access_token", "24.1903a797c5394e320ca8");
  params.put("url", imgUrl);
  params.put("id_card_side", "front");

  RequestBody requestBody = HttpHelper.buildBody(MediaType.APPLICATION_FORM_URLENCODED, params);
  JSONObject response = HttpHelper.post("https://aip.baidubce.com/rest/2.0/ocr/v1/idcard", null, requestBody, JSONObject.class);

发现调用失败,报invalid parameter无效参数,我看了之前大家都这样调外部接口的呀,打个断点发现参数都对的,顿时心生疑问。
再看下调用成功的postman,发现使用这种application/x-www-form-urlencoded格式参数会自动加到url尾部,难道要走这条路?直接把入参拼接在尾部,尝试各种将参数放到form或者body用post传都不行,唉,,还是走这条路吧

 // 组建信息
  List<Pair<String, String>> list = new ArrayList<>();
  list.add(new Pair<>("access_token", accessToken));
  list.add(new Pair<>("url", imgUrl));
  list.add(new Pair<>("id_card_side", "back"));

  String uri = HttpHelper.buildQuery(list);
  String requestUrl = OCR_HOST + uri;
// 这边只能为空,如果数据放这里面会报错
  Map<String, String> params = new HashMap<>();
  RequestBody requestBody = HttpHelper.buildBody(MediaType.APPLICATION_FORM_URLENCODED, params);
  JSONObject resultJson = HttpHelper.post(requestUrl, null, requestBody, JSONObject.class);

这种就可以了

总结: 后来自己研究了下,一个请求会有 “Content-Type定义网络文件的类型和网页的编码”,我们一般遇到比较多的是application/json JSON数据格式和multipart/form-data 表单格式,要对所有的格式有所了解才行

posted @ 2021-09-14 14:22  蜗牛使劲冲  阅读(4)  评论(0编辑  收藏  举报  来源