1. public Map<String, Object> pictureRecognition(String recotype, MultipartFile imageFile) {
  2. String result = null;
  3. // 文件输入流
  4. FileInputStream fs = null;
  5. try {
  6. String configValue = cpConfigService.getValueByConfigKey("ocr_server_config", "{'uri':'http://cloud.exocr.com/recognize','username':'test','password':'test'}");
  7. Map<String, String> configMap = JsonUtils.json2Map2(configValue);
  8. String postUrl = configMap.get("uri"); // 服务地址
  9. Map<String, String> postParam = new HashMap<String, String>(10);
  10. postParam.put("username", configMap.get("username")); // 用户名, 公有云测试可使用’test’
  11. postParam.put("password", configMap.get("password")); // 密码,公有云测试可使用 ’test’
  12. postParam.put("recotype", recotype); // BankCard
  13. postParam.put("encoding", "utf-8"); // 返回结果的文字编码方式,取值包括:utf-8, 默认值 gb2312
  14. postParam.put("head_portrait", "0"); // 是否返回头像(base64格式),只对身份证识别有效,取值范围:0,默认,不返回头像 1,则返回身份证的头像照片
  15. postParam.put("crop_image", "0"); // 是否返回切边(base64格式),取值:0, 默认,不返回切边图 1, 返回切边图
  16. postParam.put("b64", "1"); // 输入图片是否为base64格式,取值:0, 默认,二进制格式 1, base64格式
  17. // base64编码图像
  18. String base64 = new String(Base64.encodeBase64(imageFile.getBytes()));
  19. postParam.put("image", base64); // 待识别的图像,可以是二进制也可以是base64格式
  20. result = HttpUtil.postUrlAsString(postUrl, postParam, null, "utf-8");
  21. logger.info("OCR识别结果{}", result);
  22. } catch (Exception e) {
  23. logger.error("OCR识别异常:", e);
  24. StringBuilder sb = new StringBuilder();
  25. sb.append("{'Error':'99','Details':'OCR识别异常:");
  26. sb.append(e.getMessage()).append("'}");
  27. result = sb.toString();
  28. } finally {
  29. if (null != fs) {
  30. try {
  31. fs.close();
  32. } catch (IOException e) {
  33. logger.error("File input stream close exception:", e);
  34. }
  35. }
  36. }
  37.  
  38. try {
  39. return JsonUtils.json2Map(result);
  40. } catch (Exception e) {
  41. logger.error("json to map exception:", e);
  42. }
  43.  
  44. return null;
  45. }
  1. public static String postUrlAsString(String url,
  2. Map<String, String> params, Map<String, String> reqHeader,
  3. String encode) throws Exception {
  4. // 开始时间
  5. long t1 = System.currentTimeMillis();
  6. // 获得HttpPost对象
  7. HttpPost httpPost = getHttpPost(url, params, encode);
  8. // 发送请求
  9. String result = executeHttpRequest(httpPost, reqHeader, encode);
  10. // 结束时间
  11. long t2 = System.currentTimeMillis();
  12. // 调试信息
  13. logger.debug("url:" + url);
  14. logger.debug("params:" + params.toString());
  15. logger.debug("reqHeader:" + reqHeader);
  16. logger.debug("encode:" + encode);
  17. logger.debug("result:" + result);
  18. logger.debug("consume time:" + ((t2 - t1)));
  19. // 返回结果
  20. return result;
  21. }
  1. private static HttpPost getHttpPost(String url, Map<String, String> params,
  2. String encode) throws UnsupportedEncodingException {
  3. HttpPost httpPost = new HttpPost(url);
  4. if (params != null) {
  5. List<NameValuePair> form = new ArrayList<NameValuePair>();
  6. for (String name : params.keySet()) {
  7. form.add(new BasicNameValuePair(name, params.get(name)));
  8. }
  9.  
  10. UrlEncodedFormEntity entity = new UrlEncodedFormEntity(form,
  11. encode);
  12. httpPost.setEntity(entity);
  13. }
  14.  
  15. return httpPost;
  16. }
  1. /**
  2. * 执行HTTP请求
  3. *
  4. * @param request
  5. * 请求对象
  6. * @param reqHeader
  7. * 请求头信息
  8. * @return 内容字符串
  9. */
  10. private static String executeHttpRequest(HttpUriRequest request,
  11. Map<String, String> reqHeader, String encode) throws Exception {
  12. HttpClient client = null;
  13. String result = null;
  14. try {
  15. // 创建HttpClient对象
  16. client = new DefaultHttpClient();
  17. // 设置连接超时时间
  18. client.getParams().setParameter(
  19. CoreConnectionPNames.CONNECTION_TIMEOUT, 60);
  20. // 设置Socket超时时间
  21. client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
  22. 36600);
  23. // 设置请求头信息
  24. if (reqHeader != null) {
  25. for (String name : reqHeader.keySet()) {
  26. request.addHeader(name, reqHeader.get(name));
  27. }
  28. }
  29. // 获得返回结果
  30. HttpResponse response = client.execute(request);
  31. // 如果成功
  32. if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
  33. encode = StringUtils.isNotEmpty(encode) ? encode : DEFAULT_ENCODE;
  34. result = EntityUtils.toString(response.getEntity(), encode);
  35. } else {
  36. StringBuffer errorMsg = new StringBuffer();
  37. errorMsg.append("httpStatus:");
  38. errorMsg.append(response.getStatusLine().getStatusCode());
  39. errorMsg.append(response.getStatusLine().getReasonPhrase());
  40. errorMsg.append(", Header: ");
  41. Header[] headers = response.getAllHeaders();
  42. for (Header header : headers) {
  43. errorMsg.append(header.getName());
  44. errorMsg.append(":");
  45. errorMsg.append(header.getValue());
  46. }
  47. logger.error("HttpResonse Error:" + errorMsg);
  48. result = "{'Error':'98','Details':'" + errorMsg.toString() + "'}";
  49. }
  50. } catch (Exception e) {
  51. logger.error("http连接异常", e);
  52. throw new Exception("http连接异常");
  53. } finally {
  54. try {
  55. client.getConnectionManager().shutdown();
  56. } catch (Exception e) {
  57. logger.error("finally HttpClient shutdown error", e);
  58. }
  59. }
  60. return result;
  61. }

httpclient案例一(调用识别接口)的更多相关文章

  1. HttpClient与浏览器调用服务接口差异

    我用httpclient访问接口,统计图有些不均匀,差距较大 ,有时只有几十毫秒,下图看到这种情况占多数,600-800毫秒之间的算是浏览器正常的产生调用接口的时间耗时 然后用jmeter跑时都是均值 ...

  2. HttpClient Get/Post方式调用Http接口

    本节摘要:本节主要分别介绍如何用get方式.post方式向http接口发送数据. preparation 1. 项目环境如下: myeclipse6.5 .tomcat5.0.system:xp.JD ...

  3. js调用Webservice接口案例

    第一步:新建Webservice接口 主文件方法 using System;using System.Collections.Generic;using System.Web;using System ...

  4. 身份证识别接口编写的JAVA调用示例

    此java文章是基本聚合数据证件识别接口来演示,基本HTTP POST请求上传图片并接收JSON数据来处理. 使用前你需要通过 https://www.juhe.cn/docs/api/id/153 ...

  5. HttpClient结合PostMethod调用接口

    HttpClient结合PostMethod调用接口   解决方法: HttpClient client = new HttpClient(); PostMethod post = new PostM ...

  6. Java之HttpClient调用WebService接口发送短信源码实战

    摘要 Java之HttpClient调用WebService接口发送短信源码实战 一:接口文档 二:WSDL 三:HttpClient方法 HttpClient方法一 HttpClient方法二 Ht ...

  7. HttpClient调用RestFul接口(post和get方式)

    /** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...

  8. 用PHP调用证件识别接口识别本地图片

    前置条件 在开始前,请作如下准备:1.学会用PHP输出“Hello World” 2.去聚合数据申请证件识别专用的KEY:https://www.juhe.cn/docs/api/id/153 操作步 ...

  9. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

随机推荐

  1. OPP面向对象的介绍及使用

    概述 面向过程与面向对象面向过程:专注于如何去解决一个问题的过程,编程特点是用一个个函数去实现过程操作,没有类与对象的概念面向对象:专注于有哪一个对象实体去解决这个问题,编程特点是:出现了一个个的类, ...

  2. ettercap+urlsnarf+driftnet+wireshark监听妹子上网

    搞事肯定得确认目标.所以我们得先确认一个目标 确认目标这种事情不多说.   1.开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward 然后ettercap ...

  3. 2018/1/9 redis学习笔记(一)

    本文不涉及redis基本命令以及javaapi的解释操作; 首先介绍下redis,一个nosql非关系型数据库,运行在缓存中,特点就是可存储的数据结构类型很多,做为KEY-VALUE数据库,它的键只能 ...

  4. c++中对于json的key不带双引号的问题修复

    在引用了第三方数据时,数据源通过转义,将json的key上双引号给去掉了. 在PHP开发时,可以通过正则表达式替换方式来补充丢失的双引号,处理代码如下 function ex_json_decode( ...

  5. 使用performance进行网页性能监控

    由于项目需要, 需要对网页的一些性能进行监控, 接触到了performance, window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据, 将这些数据存储为 ...

  6. 广告等第三方应用嵌入到web页面方案 之 使用js片段

    在自己的项目中嵌入过广告的朋友们可能都用过百度联盟, 只需要嵌入如下一段js代码片段, 就可以在自己的项目中嵌入广告, 来获得收益. <script type="text javasc ...

  7. selenium自动化测试配置工具整理

    firefox浏览器历史版本 网址通道:http://ftp.mozilla.org/pub/firefox/releases/ chromedriver历史版本 网址通道:http://chrome ...

  8. JDBC 基础

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  9. Spring Boot:Consider defining a bean of type '*.*.*' in your configuration解决方案

    果然不看教程直接使用在遇到问题会懵逼,连解决问题都得搜半天还不一定能帮你解决了... ***************************APPLICATION FAILED TO START*** ...

  10. maven指定部署的服务器类型

    <!-- 指定部署的服务器类型 --> <plugins> <!-- <plugin> <groupId>org.apache.tomcat.ma ...