底部参考文档,欢迎点击: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. .NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(下)

    18 | 日志框架:聊聊记日志的最佳姿势 除了使用 CreateLogger 指定 logger 的名称,实际上还可以借助容器来构造 logger,通常情况下我们会定义自己的类 namespace L ...

  2. Flink CDC实时同步PG数据库到Kafka

    一.安装规划 操作系统 服务器IP 主机名 硬件配置 CentOS7.6 192.168.80.131 hadoop01 内存:2GB,CPU:2核,硬盘:100GB CentOS7.6 192.16 ...

  3. [JVM] Java内存分配

    Java内存分配 程序计数器 程序计数器是一块较小的内存区域,作用可以看做是当前线程执行的字节码的位置指示器.分支.循环.跳转.异常处理和线程恢复等基础功能都需要依赖这个计算器来完成. 虚拟机栈 虚拟 ...

  4. NEMU PA 2-3 实验报告

    课程地址:https://www.bilibili.com/video/BV1yC4y1s74C 一.实验目的 了解ELF符号表的解析 进一步完善调试器的功能,理解编译器的设计原理 二.实验步骤 在P ...

  5. 【OpenGL ES】Blinn改进的冯氏光照模型

    1 前言 ​ 光照元素主要有环境光(ambient).漫反射光(diffuse).镜面反射光(specular),光照模型主要有冯氏模型和 Blinn 改进的冯氏模型,两者区别在与镜面反射光的计算,冯 ...

  6. CentOS在无网络环境下,用离线源yum安装软件

    先说大致步骤: 1.前提假设:当前无网络的目标服务器是A,我们需要先准备一台服务器B: 2.在B上面用yum先把软件安装完成. 3.然后用createrepo将B中的包拷贝出来,并传到A上(用U盘或者 ...

  7. 服务端高性能网络IO编程模型简析

    服务端高性能网络IO编程模型简析 一.客户端与服务器端 多数网络应用可以分为客户端(client)和服务器端(server)模型,然后中间通过各种定义的协议来进行两端的通信. 比如常用的 Nginx ...

  8. 【手写信息搜集工具】ThunderSearch 闪电搜索器

    ThunderSearch 闪电搜索器 项目地址:github Windows打包版 利用ZoomEye的官方api,结合开发文档,做了这么一个GUI界面的搜索器.目前支持查询host_search ...

  9. 禁用Windows自动更新并允许手动更新

    新版的 Windows 经常会自动检查更新,然后在某个夜深人静的晚上帮你自动更新. 对于自动更新,一般的解决方案是直接禁用 Windows 更新服务.这种方式虽然关闭了自动更新,但会影响手动更新.Wi ...

  10. typing模块中Protocol协议的使用

    说明 在 Python 的 typing 模块中,Protocol 是一个用于定义协议(Protocol)的类. 协议是一种形式化的接口,定义了一组方法或属性的规范,而不关心具体的实现.Protoco ...