Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WebService系列之HttpClient调用WebService接口

WebService系列之HttpClient调用WebService接口

作者头像
SmileNicky
发布于 2021-03-17 08:06:47
发布于 2021-03-17 08:06:47
4.8K00
代码可运行
举报
文章被收录于专栏:Nicky's blogNicky's blog
运行总次数:0
代码可运行

测试工具下载soapui测试

http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.extra.credit.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;
import java.util.List;

/**
 * <pre>
 *      工具类:HttpClient方式调用webService服务
 * </pre>
 *
 * <pre>
 * @author nicky ma
 * 修改记录
 *    修改后版本:     修改人:  修改日期: 2021/03/11 10:05  修改内容:
 * </pre>
 */
@Component
public class WSHttpClientUils {

    static Logger log = LoggerFactory.getLogger(WSHttpClientUils.class);

    /**
     *  HttpClient方式调用webservice api <br>
     * @Author mazq
     * @Date 2021/03/11 10:14
     * @Param [point, params, methodName]
     * @return java.lang.String
     */
    public static String doPostWebServiceURL(String point, String params, String soapAction)throws Exception {
        String result = "";
        // 创建HttpClientBuilder
	        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
	        // HttpClient
	        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
            HttpPost httpPost = new HttpPost(point);
        try {
            httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
            httpPost.setHeader("SOAPAction", soapAction);
            StringEntity data = new StringEntity(params,
                    Charset.forName("UTF-8"));
            httpPost.setEntity(data);
            CloseableHttpResponse response = closeableHttpClient
                    .execute(httpPost);
            HttpEntity httpEntity = response.getEntity();
            if (httpEntity != null) {
                result = EntityUtils.toString(httpEntity, "UTF-8");
            }
        } catch (Exception e) {
            log.error("调用远程WebService接口异常:{}" , e);
            throw e;
        }finally {
            IOUtils.closeQuietly(closeableHttpClient);
        }
        return result;
    }

    /**
     * xml转换为JSONObject <br>
     * @Author nicky ma
     * @Date 2021/03/11 10:01
     * @Param [xmlStr]
     * @return com.alibaba.fastjson.JSONObject
     */
    public static JSONObject xml2Json(String xmlStr) throws DocumentException {
        Document doc = DocumentHelper.parseText(xmlStr);
        JSONObject json = new JSONObject();
        doParseXmlElements(doc.getRootElement() , json);
        return json;
    }

    /**
     * xml Document Elements解析 <br>
     * @Author nicky ma
     * @Date 2021/03/11 10:01
     * @Param [element, json]
     * @return void
     */
    public static void doParseXmlElements(Element element, JSONObject json) {
        List<Element> chdEl = element.elements();
        for(Element e : chdEl){
            if (!e.elements().isEmpty()) {
                JSONObject chdjson = new JSONObject();
                doParseXmlElements(e, chdjson);
                Object o = json.get(e.getName());
                if (o != null) {
                    JSONArray jsona = null;
                    if (o instanceof JSONObject) {
                        JSONObject jsono = (JSONObject) o;
                        json.remove(e.getName());
                        jsona = new JSONArray();
                        jsona.add(jsono);
                        jsona.add(chdjson);
                    }
                    if (o instanceof JSONArray) {
                        jsona = (JSONArray) o;
                        jsona.add(chdjson);
                    }
                    json.put(e.getName(), jsona);
                } else {
                    if (!chdjson.isEmpty()) {
                        json.put(e.getName(), chdjson);
                    }
                }
            } else {
                if (!e.getText().isEmpty()) {
                    json.put(e.getName(), e.getText());
                }
            }
        }
    }

}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected Map<String , String> obtainTokenByHttp(String paramJson , String url) throws Exception {
     StringBuffer soapRequestParams = new StringBuffer();
     soapRequestParams.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.webservice.catalog.infotrust.com\">");
     soapRequestParams.append("<soapenv:Header/>");
     soapRequestParams.append("<soapenv:Body>");
     soapRequestParams.append("<ser:getToken>");
     soapRequestParams.append("<ser:in0>"+paramJson+"</ser:in0>");
     soapRequestParams.append("</ser:getToken>");
     soapRequestParams.append("</soapenv:Body>");
     soapRequestParams.append("</soapenv:Envelope>");
     logger.warn(String.format("request params:%s", soapRequestParams.toString()));

     String returnDatabase = WSHttpClientUils.doPostWebServiceURL(url , soapRequestParams.toString(),"");
     logger.warn(String.format("xml string:%s" , returnDatabase));
     com.alibaba.fastjson.JSONObject jsonObject = WSHttpClientUils.xml2Json(returnDatabase);
     com.alibaba.fastjson.JSONObject body = jsonObject.getJSONObject("Body");
     com.alibaba.fastjson.JSONObject getSafeTokenResponse = body.getJSONObject("getSafeTokenResponse");
     String out = getSafeTokenResponse.getString("out");
     com.alibaba.fastjson.JSONObject outJson = JSON.parseObject(out);
     String code = outJson.getString("code");
     String message = outJson.getString("message");
     String token = "";
     logger.warn(String.format("webservice api返回数据,code:%s,message:%s",code,
             message));
     if ("200".equals(code)) {
         token = outJson.getString("token");
     }
     if (logger.isInfoEnabled()) {
         logger.info(String.format("api token:%s", token));
     }
     Map<String,String> result = new HashMap<String, String>(2);
     result.put("token",token);
     return result;
 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
httpclient4.5 结合 讯代理 实现IP代理
        代理ip是爬虫工资必要的消费,那么如何很好的利用各家服务商提供的免费代理IP呢?
Java架构师必看
2021/08/05
3340
httpclient模拟post请求json封装表单数据
以下代码包括最基本的GET、POST、JSON参数的POST方式的请求。(相当于POSTMAN中使用raw编写的参数)
I Teach You 我教你
2018/12/14
8.2K0
JavaUtil_06_HttpUtil_使用httpclient实现
一、简介 使用 appache 的 httpclient 来实现的 二、源码 package com.ray.weixin.gz.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.Consts; import org.apache.http.Header; import org.
shirayner
2018/08/10
9350
封装httpClient工具类进行get、post、put、delete的http接口请求,可添加请求头与参数,支持多线程
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157763.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/18
2.6K0
极光推送_总结_01_Java实现极光推送
一、代码实现 1.配置类—Env.java package com.ray.jpush.config; /**@desc : 极光推送接入配置 * * @author: shirayner * @date : 2017年9月27日 下午4:57:36 */ public class Env { /** * 1.极光推送后台APPKEY,MASTER_SECRET */ public static final String APP_KEY = "354f
shirayner
2018/08/10
1K0
httpclient post发送json数组并解决json乱码问题
业务: 客户端发送json数据,服务端进行解析 client发送json格式: {"data":[{"name":"1;,a","id_no":"222,a","cellphone":"123141a","abode_detail":"213,a","emp_add":"werew3a","app_no":"111111111111a","create_time":"11a"},{"name":"张三","id_no":"null","cellphone":"null","abode_detai
shengjk1
2018/10/24
4.3K0
基于rest风格对Neo4j进行调用访问之———httpClient
1.什么是rest风格 不知道戳这里 2.什么是Neo4j 简单来说是一个图形数据库,是一种NOSQL型的。具体摸我 3.httpclient 访问 参考官网链接摸我。 代码如下: package neo4j.action; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import neo4j.config.RestTemplateConfiguration; import org.apach
MickyInvQ
2020/09/27
9770
基于rest风格对Neo4j进行调用访问之———httpClient
Java发送Post请求,获取返回的请求头Header
在利用Java网络编程时,利用Java获取HTTP Request 和 Response头字段;
chenchenchen
2021/09/06
5.8K0
HttpClient详细解释
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会更加深入。
全栈程序员站长
2022/11/16
1.5K0
Java实现调用HTTP请求的几种常见方式
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/09/19
5.9K0
Java实现调用HTTP请求的几种常见方式
Java HttpClient两种数据传输方式
二、server端的数据接收方式,使用@RequestBody接收二进制字节流,使用@RequestParam接收参数列表
week
2018/08/24
3.5K0
Apache httpClient+Jackson学习笔记
HTMLUnit可以用来做爬虫的。Jsoup比他跟简洁。使用python语言进行爬虫.开箱即用。
全栈程序员站长
2022/06/30
2.5K0
Apache httpClient+Jackson学习笔记
HTTP 请求工具类
坐标 <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.1</version> <classifier>jdk15</classifier> </dependency> 工具类 package com.baomidou.springboot.uti
高大北
2022/06/14
9540
Java发送Http请求(HttpClient)
HttpClient 是Apache HttpComponents 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是Apache HttpComponents 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
ha_lydms
2023/08/09
1K0
CloseableHttpClient简单使用实例[通俗易懂]
import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.Charset; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException;
全栈程序员站长
2022/07/25
8820
【微服务~远程调用】HttpClient入门
👀专栏介绍 【微服务~远程调用】 目前主要更新微服务,一起学习一起进步。 👀本期介绍 本期主要介绍微服务~远程调用 文章目录 概述         前言         什么是远程调用         调用方式 搭建环境         父项目         测试数据项目 环境 基本功能 测试 HttpClient入门         概述         搭建环境         基本功能      GET请求--无参:查询所有 练习:GET请求:查询详情 GET请求--有参:拼凑URL POST请
陶然同学
2023/02/27
5320
【微服务~远程调用】HttpClient入门
求助-钉钉开发异步消息失败
源码: 1.AsyncMessage.java package com.ray.dingtalk.model.message.asyncsend; /**@desc : * * 参考文档地
shirayner
2018/08/10
8391
java怎么发起HttpRequest请求,返回状态码和内容并解析json
github地址:https://github.com/furtech/java_utils/blob/master/src/main/java/com/furtech/javautils/HttpRequestUtil.java 代码中有详细说明(就不过多解释了) 依赖如下: //codeStatus compile 'commons-httpclient:commons-httpclient:3.1' // entity and codeStatus (recommend
gfu
2019/08/28
3.3K0
WebService接口
这是我在做对外部系统推送数据时自己写的WebService推送接口工具类,有几点需要注意
全栈程序员站长
2022/09/07
1.5K0
WebService接口
使用HttpClient测试SpringMVC的接口
最近在写SSM创建的Web项目,写到一个对外接口时需要做测试,接受json格式的数据。在线测试需要放公网地址,无奈localhost无法访问,测试工具需要安装,不想折腾,想到写爬虫的时候用到的HttpClient可以发Post请求,于是进行了尝试。
geekfly
2022/05/06
3350
相关推荐
httpclient4.5 结合 讯代理 实现IP代理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验