300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > HTTP post 请求携带xml格式报文请求接口

HTTP post 请求携带xml格式报文请求接口

时间:2021-08-05 23:49:29

相关推荐

HTTP post 请求携带xml格式报文请求接口

欢迎关注微信公众号:程序员小圈圈

转载请标明出处^_^

原文首发于:

本文出自于: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 .MalformedURLException;import .URL;import .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: 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!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。