httpclient案例一(调用识别接口)
public Map<String, Object> pictureRecognition(String recotype, MultipartFile imageFile) {
String result = null;
// 文件输入流
FileInputStream fs = null;
try {
String configValue = cpConfigService.getValueByConfigKey("ocr_server_config", "{'uri':'http://cloud.exocr.com/recognize','username':'test','password':'test'}");
Map<String, String> configMap = JsonUtils.json2Map2(configValue);
String postUrl = configMap.get("uri"); // 服务地址
Map<String, String> postParam = new HashMap<String, String>(10);
postParam.put("username", configMap.get("username")); // 用户名, 公有云测试可使用’test’
postParam.put("password", configMap.get("password")); // 密码,公有云测试可使用 ’test’
postParam.put("recotype", recotype); // BankCard
postParam.put("encoding", "utf-8"); // 返回结果的文字编码方式,取值包括:utf-8, 默认值 gb2312
postParam.put("head_portrait", "0"); // 是否返回头像(base64格式),只对身份证识别有效,取值范围:0,默认,不返回头像 1,则返回身份证的头像照片
postParam.put("crop_image", "0"); // 是否返回切边(base64格式),取值:0, 默认,不返回切边图 1, 返回切边图
postParam.put("b64", "1"); // 输入图片是否为base64格式,取值:0, 默认,二进制格式 1, base64格式
// base64编码图像
String base64 = new String(Base64.encodeBase64(imageFile.getBytes()));
postParam.put("image", base64); // 待识别的图像,可以是二进制也可以是base64格式
result = HttpUtil.postUrlAsString(postUrl, postParam, null, "utf-8");
logger.info("OCR识别结果{}", result);
} catch (Exception e) {
logger.error("OCR识别异常:", e);
StringBuilder sb = new StringBuilder();
sb.append("{'Error':'99','Details':'OCR识别异常:");
sb.append(e.getMessage()).append("'}");
result = sb.toString();
} finally {
if (null != fs) {
try {
fs.close();
} catch (IOException e) {
logger.error("File input stream close exception:", e);
}
}
}
try {
return JsonUtils.json2Map(result);
} catch (Exception e) {
logger.error("json to map exception:", e);
}
return null;
}
public static String postUrlAsString(String url,
Map<String, String> params, Map<String, String> reqHeader,
String encode) throws Exception {
// 开始时间
long t1 = System.currentTimeMillis();
// 获得HttpPost对象
HttpPost httpPost = getHttpPost(url, params, encode);
// 发送请求
String result = executeHttpRequest(httpPost, reqHeader, encode);
// 结束时间
long t2 = System.currentTimeMillis();
// 调试信息
logger.debug("url:" + url);
logger.debug("params:" + params.toString());
logger.debug("reqHeader:" + reqHeader);
logger.debug("encode:" + encode);
logger.debug("result:" + result);
logger.debug("consume time:" + ((t2 - t1)));
// 返回结果
return result;
}
private static HttpPost getHttpPost(String url, Map<String, String> params,
String encode) throws UnsupportedEncodingException {
HttpPost httpPost = new HttpPost(url);
if (params != null) {
List<NameValuePair> form = new ArrayList<NameValuePair>();
for (String name : params.keySet()) {
form.add(new BasicNameValuePair(name, params.get(name)));
}
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(form,
encode);
httpPost.setEntity(entity);
}
return httpPost;
}
/**
* 执行HTTP请求
*
* @param request
* 请求对象
* @param reqHeader
* 请求头信息
* @return 内容字符串
*/
private static String executeHttpRequest(HttpUriRequest request,
Map<String, String> reqHeader, String encode) throws Exception {
HttpClient client = null;
String result = null;
try {
// 创建HttpClient对象
client = new DefaultHttpClient();
// 设置连接超时时间
client.getParams().setParameter(
CoreConnectionPNames.CONNECTION_TIMEOUT, 60);
// 设置Socket超时时间
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
36600);
// 设置请求头信息
if (reqHeader != null) {
for (String name : reqHeader.keySet()) {
request.addHeader(name, reqHeader.get(name));
}
}
// 获得返回结果
HttpResponse response = client.execute(request);
// 如果成功
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
encode = StringUtils.isNotEmpty(encode) ? encode : DEFAULT_ENCODE;
result = EntityUtils.toString(response.getEntity(), encode);
} else {
StringBuffer errorMsg = new StringBuffer();
errorMsg.append("httpStatus:");
errorMsg.append(response.getStatusLine().getStatusCode());
errorMsg.append(response.getStatusLine().getReasonPhrase());
errorMsg.append(", Header: ");
Header[] headers = response.getAllHeaders();
for (Header header : headers) {
errorMsg.append(header.getName());
errorMsg.append(":");
errorMsg.append(header.getValue());
}
logger.error("HttpResonse Error:" + errorMsg);
result = "{'Error':'98','Details':'" + errorMsg.toString() + "'}";
}
} catch (Exception e) {
logger.error("http连接异常", e);
throw new Exception("http连接异常");
} finally {
try {
client.getConnectionManager().shutdown();
} catch (Exception e) {
logger.error("finally HttpClient shutdown error", e);
}
}
return result;
}
httpclient案例一(调用识别接口)的更多相关文章
- HttpClient与浏览器调用服务接口差异
我用httpclient访问接口,统计图有些不均匀,差距较大 ,有时只有几十毫秒,下图看到这种情况占多数,600-800毫秒之间的算是浏览器正常的产生调用接口的时间耗时 然后用jmeter跑时都是均值 ...
- HttpClient Get/Post方式调用Http接口
本节摘要:本节主要分别介绍如何用get方式.post方式向http接口发送数据. preparation 1. 项目环境如下: myeclipse6.5 .tomcat5.0.system:xp.JD ...
- js调用Webservice接口案例
第一步:新建Webservice接口 主文件方法 using System;using System.Collections.Generic;using System.Web;using System ...
- 身份证识别接口编写的JAVA调用示例
此java文章是基本聚合数据证件识别接口来演示,基本HTTP POST请求上传图片并接收JSON数据来处理. 使用前你需要通过 https://www.juhe.cn/docs/api/id/153 ...
- HttpClient结合PostMethod调用接口
HttpClient结合PostMethod调用接口 解决方法: HttpClient client = new HttpClient(); PostMethod post = new PostM ...
- Java之HttpClient调用WebService接口发送短信源码实战
摘要 Java之HttpClient调用WebService接口发送短信源码实战 一:接口文档 二:WSDL 三:HttpClient方法 HttpClient方法一 HttpClient方法二 Ht ...
- HttpClient调用RestFul接口(post和get方式)
/** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...
- 用PHP调用证件识别接口识别本地图片
前置条件 在开始前,请作如下准备:1.学会用PHP输出“Hello World” 2.去聚合数据申请证件识别专用的KEY:https://www.juhe.cn/docs/api/id/153 操作步 ...
- WebApi接口 - 如何在应用中调用webapi接口
很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...
随机推荐
- 让XtraMessageBox按钮显示中文
需要定义一个继承子Localizer的类,然后重写GetLocalizedString public class MessboxClass : Localizer { public override ...
- 链表回文判断(C++)
题目描述: 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构. 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构.保证链表长度小于等 ...
- HoloLens开发手记-世界坐标系 Coordinate systems
坐标系 Coordinate systems 全息的核心是,全息应用可以在真实世界中放置全息图形并使得它们看起来和听起来像真实的物体.这涉及到了物体在真实世界中的定位和方向的确定,这对用户来说很重要. ...
- 深入理解viewport
这篇文章我已写成pdf,建议直接下载浏览. 链接:https://pan.baidu.com/s/1c4cwd7E 密码:jty1 <对viewport标签的理解> --版权所有 @RYZ ...
- 【ASP.NET Core】处理异常(上篇)
依照老周的良好作风,开始之前先说点题外话. 前面的博文中,老周介绍过自定义 MVC 视图的搜索路径,即向 ViewLocationFormats 列表添加相应的内容,其实,对 Razor Page 模 ...
- [Python Study Notes]CS架构远程访问获取信息--Client端v2.0
更新内容: 1.增加内存信息获取 2.增加电池信息获取 3.增加磁盘信息获取 4.重新布局窗体 5.增加窗体名称 6.增加连接成功之前,不可按压 效果图: '''''''''''''''''''''' ...
- BCDEdit命令添加WinPE启动项
bcdedit /create {ffffffff-8d96-11de-8e71-ffffffffffff} /d "系统维护" /device bcdedit /create ...
- MySQL的字符编码设置
-- 创建数据库时,设置数据库的编码方式 -- CHARACTER SET:指定数据库采用的字符集,utf8不能写成utf-8-- COLLATE:指定数据库字符集的排序规则,utf8的默认排序规则为 ...
- yum 安装 nfs,rpcbind 出现错误 libc.so.6(GLIBC_2.14)(64bit) is needed by
错误信息: Running rpm_check_debugERROR with rpm_check_debug vs depsolve:libc.so.6(GLIBC_2.14)(64bit) is ...
- NOIP2017滚粗记
NOIP2017滚粗记 扯淡 考完联赛后一直在搞文化... 联赛过去了不知道多少天了才来写这东西.... Day0 早自习知道了要期中考试. 感觉心态炸裂了. 上午在乱敲板子.... 打了一堆莫名其妙 ...