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接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...
随机推荐
- python 路飞模块一考核总结
1. 分别解释"=","==","+="的含义(口述) =为赋值语句,把一个变量值赋予另一个值 == 为条件判断,判断两个值是否相等 += ...
- mysql 密码过期问题
问题描述: Your password has expired. To log in you must change it using a client that supports expired p ...
- jq自定义多选下拉列表框
多选选择国家插件 https://gitee.com/richard1015/dropDownList
- Oracle批量操作数据库
1:批量插入 <insert id="insertBatch" parameterType="Java.util.List" > insert in ...
- 装x玩法:插上你的专有U盘才能开机
玩法的效果是这样的: 1.插上你的专有U盘,按电脑开机按钮,电脑正常启动运行: 2.如果不插专有优U盘,按电脑开机按钮,进入桌面后1秒钟电脑自动关机,无法使用.也就是说,没有优U盘将无法使用你的电脑. ...
- Effective Java 第三版——33. 优先考虑类型安全的异构容器
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- ArrayList源码阅读
前言 数组是我们最常用最简单的数据结构,Java里对数组做了一个简单的包装,就是ArrayList,提供自动扩容的功能. 最常用法 list在我们日常代码中最为常用的做法是创建一个list,放入数据, ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记18
day18课程内容: os模块 import osprint(os.getcwd())#D:\untitled\练习题 获取当前工作目录os.chdir(r'D:\untitled\练习题\16.1切 ...
- docker 数据卷之进阶篇
笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...
- FineUICore已发布,跨平台速度快(现在可申请试用)!
为什么选择ASP.NET Core 2.0?=================== 速度快,ASP.NET Core 的运行速度是 ASP.NET 4.6 的 6 - 23倍. 跨平台,可在Windo ...