欢迎关注微信公众号:程序员小圈圈
转载请标明出处^_^
原文首发于:www.zhangruibin.com
本文出自于:RebornChang的博客

厚颜打广告,博主个人博客地址传送门 ,欢迎来访

请求远程接口的方式有很多,规则也有很多,暴露接口的方式也有很多,这里简单的说下怎样使用http请求方式提交post请求,并且参数是以xml文本格式.
首先要确定这个接口能够使用xml格式参数请求成功,可以先用接口测试工具进行测验,工具比如Postman,soapUI等等,具体的接口工具安装使用教程这里就不多说了,网上一搜一大把的,那么接下来说下HTTP+POST+XML格式的请求代码思路:
1.将参数XML参数格式写在项目文件中,在封装参数的时候,先读取XML文件,然后根据获取到的参数进行请求报文的拼接.这种方式的优点是可维护性较好,但是过程比较繁琐.
2.使用stringbilder或者stringbuffer对请求报文进行拼接.这种方式比之前一种效率略高,但是维护性偏低.
所以选择哪种方式进行请求报文的拼接,因地制宜.
然后再简单说下HTTP请求的报文传输,传输的过程大致分为以下几步:
1:创建HTTP链接.HTTPpost请求方式,基于HTTP协议创建链接,三次握手啥的,具体的创建链接过程可参考书籍深入理解HTTP1.0;
2:传输报文.当链路传输建立之后,就是使用协议请求方式(比如post)进行报文的传输.报文的传输无疑是用流的方式进行传输的,请求方先在本地定义好请求的报文,然后以流的方式通过建立的管道传输给服务端,服务端拿到请求数据流之后,对这个流进行解析,然后根据请求报文流的内容作出自己不同的回应.
3:对相应报文进行解析.服务端给出的回应到了请求端后,请求端根据服务器端返回的报文内容作出自己的判断.
那么将这个步骤体现到java代码又是怎样的?博主po出来自己写的一个使用StringBuilder拼接报文的样例代码仅供参考,其中请求的URL接口写在配置文件中,然后使用java UTIL 包里面的propertie进行properties文件的解析,拿到远端的请求接口.具体的代码如下:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.regex.Pattern;import com.ztesoft.sale.controller.login.LoginByAuthenUtils;/*** * @ClassName: HttpPostXml* @Description: TODO 使用http+post+xml方式访问远端接口* @author: zhrb* @date: 2018年7月6日 上午11:26:28 v1.0*/
public class HttpPostXml {/*** * @author:            zhrb* @Title:             creatPostAndTransData* @Description:       TODO* @param:             @param dataMap,内含ip,disPhone,email* @param:             @return   String 类型,string是请求接口返回的报文信息拼接的字符串* @return:            String   * @throws MalformedURLException,IOException*/public  String creatPostAndTransData(Map<String, Object> dataMap) {String urlStr = "";String line = "";StringBuffer resultSting = new StringBuffer();try {//urlStr,写在了配置文件中,直接进行获取urlStr = LoginByAuthenUtils.getECS010001Addr();//声明URLURL url = new URL(urlStr);//1.创建链接URLConnection con = url.openConnection();//2.封装报文传输进行传输//调用getXmlInfo(Map<String, Object> dataMap)进行报文的封装String xmlInfo = getXmlInfo(dataMap);byte[] xmlData = xmlInfo.getBytes();con.setDoOutput(true);   con.setDoInput(true);  con.setUseCaches(false); con.setRequestProperty("Pragma:", "no-cache");con.setRequestProperty("Cache-Control", "no-cache");con.setRequestProperty("Content-Type", "text/xml");con.setRequestProperty("Content-length",String.valueOf(xmlData.length)); OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());System.out.println(">>>>>>>>>>接口地址为urlStr=" + urlStr);System.out.println(">>>>>>>>>>传入的报文xmlInfo=" + xmlInfo);out.write(new String(xmlInfo.getBytes("ISO-8859-1")));out.flush();out.close();//3.获取返回报文BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));//对返回值报文进行打印for (line = br.readLine(); line != null; line = br.readLine()) {//对返回的报文进行结果判断<RspCode>0000</RspCode>System.out.println(">>>>>>>>>>>>>>>>>>>返回的结果报文内容为:---------"+line);//对返回的报文进行拼接,然后返回给业务层,在业务层进行判断resultSting.append(line);}return resultSting.toString();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return resultSting.toString();}/*** * @author:            zhrb* @Title:             getXmlInfo* @Description:       TODO 接收数据,拼接生成请求报文* @param:             @param dataMap,内含ip,disPhone,email* @param:             @return   * @return:            String   * @throws*/private static String getXmlInfo(Map<String, Object> dataMap) {Date newDate = new Date();SimpleDateFormat smpDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formatString = smpDateFormat.format(newDate);String platNo   = "";String timeStamp= "";String pid      = "";String ip       = "";String disPhone = "";String pwd      = "";String email    = "";platNo = "xxxx";timeStamp =formatString; pid = "xx";//服务层传参,登录用户的ip地址ip = dataMap.get("ip").toString();//服务层传参,新增用户的手机号disPhone = dataMap.get("disPhone").toString();//pwd = dataMap.get("pwd").toString();//不传输,直接从配置文件中获取pwd = LoginByAuthenUtils.getDefultPwd();//服务层传参,新增用户的邮箱email = dataMap.get("email").toString();// TODO 动态传入参数StringBuilder sb = new StringBuilder();sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");sb.append("<ECSRoot>");sb.append("    <Header>");sb.append("        <PlatNo>" + platNo + "</PlatNo>");sb.append("        <TimeStamp>" + timeStamp + "</TimeStamp>");sb.append("    </Header>");sb.append("    <Body>");sb.append("        <PID>" + pid + "</PID>");sb.append("        <CityNo>xxx</CityNo>");sb.append("        <IPAddr>" + ip + "</IPAddr>");sb.append("        <UName>" + disPhone + "</UName>");sb.append("        <UPWD>" + pwd + "</UPWD>");sb.append("        <UType>xxx</UType>");sb.append("        <UStatus>xxx</UStatus>");sb.append("        <Email>" + email + "</Email>");sb.append("    </Body>");sb.append("</ECSRoot>");return sb.toString();}
}

以上就是使用HTTP方式post请求携带xml文本进行远端接口的调用,其他请求报文的格式可以类比.
OVER!

HTTP post 请求携带xml格式报文请求接口相关推荐

  1. Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应

    在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...

  2. SSM中通过okhttp3向接口发送xml格式的请求参数

    场景 在SSM项目中的后台Controller中需要想asp的接口发送xml格式的请求参数. 依据接口文档示例代码. 入参: <Request><ServiceCode>get ...

  3. xml格式报文的拼装,和解析成实体类

    我们的微信支付,使用的是第三方的支付,某银行的微信支持渠道.所有的接口请求.应答都是xml格式报文,这样就需要用到xml格式报文的拼装和解析,这儿简单讲一下. 拼接xml格式报文. 从页面表单提交和配 ...

  4. Ajax实现异步操作实例_针对XML格式的请求数据

    js分类中有一节[原生js异步请求,XML解析]主要说明了js前台是如何处理XML格式请求和如何接受由服务器返回的XML数据的解析,今天我将用一个实例来说明具体要如何操作. 前台的参数类型也是XML使 ...

  5. 实现发送xml格式的请求

    还是map的参数比较好set一点.所以我通过把传入的map参数转为xml再发送请求 请求封装: public static Map HttpRequest(String urlStr , Map< ...

  6. 前端cookie 放到请求头_ajax请求携带cookie和自定义请求头header(跨域和同域)

    错误: 1.ajax请求时是不会自动带上cookie的,要是想让他带上的话,必须设置withCredential为true. 正确: 1.ajax同域请求下,ajax会自动带上同源的cookie: 2 ...

  7. Jmeter性能测试之请求MXL格式报文

    一.关于Webservice的一些基础知识 参考文章 Webservice学习总结 总结: WebService是一种跨编程语言和跨操作系统平台的远程调用技术.使用webservice技术的接口就可以 ...

  8. Java发送HTTP POST请求(内容为xml格式)

    今天在给平台用户提供http简单接口的时候,顺便写了个调用的Java类供他参考.      服务器地址:http://5.0.217.50:17001/VideoSend 服务器提供的是xml格式的h ...

  9. 接口返回xml格式的数据_接口测试之Jmeter串联xml数据格式请求

    点击上方蓝色字体,关注我们 要求 1.测试支付及支付检测两个接口 2.支付及检测的接口请求为xml格式 3.支付请求数据要多组不一样的数据 4.每个接口请求有些参数要求全局唯一 5.模拟正常场景,支付 ...

最新文章

  1. 解压zip_go|用Go写一个zip解压脚本
  2. 汇总|实时性语义分割算法
  3. TextLink的空格使用
  4. [高效时间管理] 番茄工作钟 windows版本
  5. centos7安装mysql允许远程连接_CentOS7安装Mysql并配置远程访问
  6. 在服务中创建用户进程的方法(C#版)
  7. Ubuntu 16.04 安装Matlab R2015b
  8. 学以致提高学生操作计算机能力,学用结合,学以致用
  9. Typora恢复忘记保存的文件
  10. 重装系统后小喇叭显示未安装音频输出设备
  11. 基于ThreeJS的3D地球
  12. 漏洞优先级技术(VPT)导论
  13. 产权:使用权、收益权和转让权
  14. 迅为iTOP6818开发板QtE5.7应用例程源码
  15. html文本框php,HTML文本框5种应用方式实现方法
  16. Xlsx转Json(JS Object/Array) Javascript/Typescript版本
  17. r5 6600h怎么样 相当于什么水平
  18. 扎拉赞恩 服务器 微信群,《魔兽世界怀旧服》杜隆塔尔扎拉赞恩攻略 任务怎么玩...
  19. 0x00007FF8DC013526(ntdll.dll) 处(位于XXX.exe中) 引发的异常 osg 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF时发生访问
  20. 使用vs2019将libtorch或者网络打包成dll

热门文章

  1. Day002 费九牛二虎之力搭环境,倾洪荒之力写HelloWorld
  2. 马云:网络借钱很方便,1分钟到账,年轻一代从不担心钱的问题
  3. 视频教程-热更新框架设计之热更流程与热补丁视频课程-Unity3D
  4. C++_OpenCV获取图像中某个坐标的像素值信息
  5. 解决Xcode模拟器attaching卡死问题
  6. python解题软件哪个好_用 Python 实现手机自动答题,这下百万答题游戏谁也玩不过我!...
  7. 《惢客创业日记》2019.07.24(周三)从产品角度理解“为腹不为目”
  8. 职业教育计算机教材,职业教育精品实用教材·计算机应用基础
  9. Thinkpad BIOS里的五个选项设置介绍
  10. firefox 离线模式