底部参考文档,欢迎点击: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 表单格式,要对所有的格式有所了解才行

百度api经历的更多相关文章

  1. 百度API的经历,怎样为多个点添加带检索功能的信息窗口

    不管我们要做什么样的效果,APIKey(密钥)都是不可缺少的要件,所以我们需要先去百度申请我们的APIKey!!! 伸手党,请直接到页面底部获取完整代码! 最近做一个门店查询的内容展示,考虑到用户直观 ...

  2. 利用百度API Store接口进行火车票查询

    火车票查询 项目源码下载链接: Github:https://github.com/VincentWYJ/TrainTicketQuery 博客文件:http://files.cnblogs.com/ ...

  3. 百度API ; 很多有用的接口及公用 数据

    百度API : http://apistore.baidu.com/ . 比如手机号码:

  4. 去百度API的百度地图准确叠加和坐标转换的解决方案研究

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 目前项目上如果要使用百度地图,得加载百度的开发包,然后通过百 ...

  5. 百度api短信开发

    公司原来有一个短信发送的功能,是调用第三方的,但是很不稳定,时不时就收不到短信,但是钱已经扣了.对于这样的事,谁都忍受不了的.于是想找一个稳定短信发送平台,第一想到的是阿里云,百度.在这两个平台上公司 ...

  6. html5获取经纬度,百度api获取街区名,并使用JS保存进cookie

    引用js<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak= ...

  7. 百度API使用--javascript api进行多点定位

    使用百度地图提供的javascript api,给定多点的经纬度坐标,在百度地图上 显示这些坐标点. 其中包括各个点自适应地图显示,自定义坐标点的图标,以及各个点之间添加折线. 实现的效果如下图: 具 ...

  8. PHP学习笔记:利用百度api实现手机归属地查询

    从来没有用过api,都不知道怎么获得api的数据,跟着demo,然后修改,终于实现了手机号码查询的功能,代码和说明很全,大家试试. <?php /** * Created by jianqing ...

  9. 【百度地图API】百度API卫星图使用方法和卫星图对比工具

    原文:[百度地图API]百度API卫星图使用方法和卫星图对比工具 百度地图API推出卫星图接口也有一个月啦~ 本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具. 一.百度 ...

  10. 【转】百度API获取城市名地名(附源码)

    在做一个软件时,用到了定位功能.网上有很多关于google 的GPS定位,但网上关于google定位都没有用, 搜索下原因:(这里建议大家在中国就尽量不使用系统自带的定位) 因为Google的服务器不 ...

随机推荐

  1. 教你用JavaScript实现进度条

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个进度条.进度条数字自动增加,条状图片动画演示进度完成度.通过实战我们将学会函数fun ...

  2. Python 元组详细使用

    1. 元组 元组和列表类似,但属于不可变序列,元组一旦创建,用任何方法都不可修改其元素. 元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号"()"中,而不是方括号中. 1 ...

  3. postman application/json;

    看来以后需要都统一使用这个json比较方便. 首先看下 spring boot 项目接口的返回: 当然若不加,他默认可能也是 UTF-8,还是加一下吧.这样就可以了,保证以后 请求和响应的 conte ...

  4. DELPHI IDE 代码智能提示

  5. Hbase-执行hbase shell命令时提示:ERROR: KeeperErrorCode = NoNode for /hbase/master

    1.问题描述 执行hbase  shell命令时提示: ERROR: KeeperErrorCode = NoNode for /hbase/master 2.问题原因 这是与因为服务器重启后Hado ...

  6. MYSQL 1 DAY

    目录 MySQL 1.sql.DB.DBMS分别是什么,他们之间的关系? 2.什么是表? 3.学习MySQL主要还是学习通用的SQL语句,那么SQL语句包括增删改查,SQL语句怎么分类呢? 4.导入数 ...

  7. 【开工大吉】推荐4款开源、美观的WPF UI组件库

    前言 经常有小伙伴在技术群里提问:WPF有什么好用的UI组件库?,今天大姚给大家推荐4款开源.美观的WPF UI组件库. WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 ...

  8. dotnet-cnblog tool 测试案例

    这是测试donet-cnblog工具是否能将正常的Typora图片转换为博客园格式 测试1:本地图片导入 测试2:QQ截图 测试3:url https://pics3.baidu.com/feed/9 ...

  9. Spring事务使用注意事项

    Spring提供的事务使用起来很方便,一个@Transactional注解就搞定全部,但是如果不注意,也会踩坑 提到事务就应该想到至少以下几点: 1.在事务方法中加锁,可能会导致锁失效 无论是Java ...

  10. IPFS 添加和管理文件

    IPFS的文件有不同的模式 默认模式 默认模式下, 文件会被解析并存入blocks, 同时文件的结构被存入filestore, 因为IPFS是按内容寻址的文件系统, 在添加时最外层的目录名或文件名信息 ...