当前位置: 首页 > news >正文

重庆网站建设-首选云慧通打开一个网站

重庆网站建设-首选云慧通,打开一个网站,贵州网站建设公司,博物馆网站建设说明webservice中采用协议Http,是指什么意思 WebService使用的是 SOAP (Simple Object Access Protocol)协议 Soap协议只是用来封装消息用的。封装后的消息你可以通过各种已有的协议来传输,比如http,tcp/ip,smtp,等等,你甚至还一次用自定义的协议…

webservice中采用协议Http,是指什么意思

WebService使用的是 SOAP (Simple Object Access Protocol)协议
Soap协议只是用来封装消息用的。封装后的消息你可以通过各种已有的协议来传输,比如http,tcp/ip,smtp,等等,你甚至还一次用自定义的协议,当然也可以用https协议。
Soap建立在http上,说白了是用http传送xml而已。

SOAP协议= HTTP协议+ XML数据格式

SOAP协议是基于HTTP协议的,两者的关系就好比高速公路是基于普通公路改造的,在一条公路上加上隔离栏后就成了高速公路。
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议(simple object access protocol,简单对象访问协议) 。
商店的服务员只要收到了钱就给客户提供货物,商店服务员不用关心客户是什么性质的人,客户也不用关心商店服务员是什么性质的人。同样,WebService客户端只要能使用HTTP协议把遵循某种格式的XML请求数据发送给WebService服务器,WebService服务器再通过HTTP协议返回遵循某种格式的XML结果数据就可以了,WebService客户端与服务器端不用关心对方使用的是什么编程语言。

原生底层webService的调用方式:

1、在服务器上,通过 curl 地址 命令来获取xml文件格式。
2、获取到格式后,在服务器上通过curl的完整命令,进行测试返参等。
curl --location --request POST '地址' \
--header 'Content-Type: text/xml' \
--data '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hjb="http://localhost:8080/hjbjWebService"><soapenv:Header/><soapenv:Body><xxx:xxxxxx soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><in0 xsi:type="xsd:string">入参</in0></xxx:xxxxxx></soapenv:Body>
</soapenv:Envelope>'
3、解析xml,访问三方服务
package com.ylz.bjyf.ggfw.apps.proxy.handler.ws;import com.alibaba.fastjson.JSONObject;
import com.ylz.bjyf.ggfw.apps.proxy.exception.FailException;
import com.ylz.bjyf.ggfw.apps.proxy.exception.ProxyException;
import com.ylz.bjyf.ggfw.apps.proxy.handler.HttpHandler;
import com.ylz.bjyf.ggfw.apps.proxy.handler.ProxyHandler;
import com.ylz.bjyf.ggfw.apps.proxy.util.HttpUtils;
import com.ylz.bjyf.ggfw.apps.service.entity.YwztProxy;
import com.ylz.bjyf.ggfw.common.util.XmlUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestClientException;import java.util.List;
import java.util.Map;@Slf4j
@Component("proxy.wsHttp")
public class wsHttpHandler extends ProxyHandler {@Autowiredprivate HttpUtils httpUtils;@Overrideprotected MultiValueMap<String, Object> encodeParam(String serialno, JSONObject config, MultiValueMap<String, Object> param) throws FailException, ProxyException {//config传参中,传入xml模板String[] keyList = config.getString("keyList").split(",");//获取模板xmlString xml = config.getString("xml");//替换方法名if (config.containsKey("func")) {xml.replace("{{func}}", config.getString("func"));}//替换命名空间if (config.containsKey("namespace")) {xml.replace("{{namespace}}", config.getString("namespace"));}//替换参数for (int i = 0; i < keyList.length; i++) {String key = keyList[i];if (param.get(key).size() > 0 && param.get(key).get(0) != null) {xml = xml.replace("{{" + key + "}}", param.get(key).get(0).toString());} else {xml = xml.replace("{{" + key + "}}", "");}}MultiValueMap<String, Object> paramMapPage = new LinkedMultiValueMap<>();paramMapPage.add("data", xml);return paramMapPage;}@Overrideprotected String excute(YwztProxy proxy, JSONObject config, MultiValueMap<String, Object> param) throws ProxyException, FailException {//构造http请求头HttpHeaders headers = new HttpHeaders();MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8");headers.setContentType(type);if (config.containsKey(HttpHandler.HEADER_STR) && !StringUtils.isEmpty(config.get(HttpHandler.HEADER_STR))) {JSONObject headerParams = config.getJSONObject(HttpHandler.HEADER_STR);for (Map.Entry k : headerParams.entrySet()) {headers.set(k.getKey().toString(), k.getValue().toString());}}HttpEntity<String> formEntity = new HttpEntity<>(param.get("data").get(0).toString(), headers);String resultStr = null;try {resultStr = httpUtils.postForString(proxy.getUrl(), HttpMethod.POST, formEntity);} catch (RestClientException e) {log.error(ProxyException.DEFAULT_MESSAGE, e);throw new FailException("调用接口异常:" + e.getMessage());}if (resultStr == null) {throw new FailException("调用接口失败");}return resultStr;}@Overrideprotected String decodeResult(String serialno, JSONObject config, String resultString) {resultString = StringEscapeUtils.unescapeXml(resultString);if (config.containsKey("resultTag")) {return XmlUtils.getTextForElement(resultString, config.getString("resultTag"));} else if (config.containsKey("delText")) {return resultString.replace(config.getString("delText"), "");}return resultString;}
}
xml模板:
{"resultTag": "hjbjcxResponse","keyList": "json","xml": "<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:hjb=\"xxxxxxxx\"><soapenv:Header/><soapenv:Body><xxx:xxxxxx soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><in0 xsi:type=\"xsd:string\">{{json}}</in0></xxx:xxxxxx></soapenv:Body></soapenv:Envelope>"
}
http调用:
package com.ylz.bjyf.ggfw.apps.proxy.util;import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.ylz.bjyf.ggfw.apps.proxy.exception.FailException;
import com.ylz.bjyf.ggfw.apps.proxy.exception.ProxyException;
import io.vertx.core.json.JsonObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;import java.util.List;@Slf4j
@Service
public class HttpUtils {@AutowiredRestTemplate restTemplate;public String postForString(String url, HttpMethod method, HttpEntity<?> requestEntity) throws FailException, ProxyException {try {if (HttpMethod.GET.equals(method)) {return getForString(url, method, requestEntity);}ResponseEntity<String> result = restTemplate.exchange(url, method, requestEntity, String.class);if (HttpStatus.OK.equals(result.getStatusCode())) {return result.getBody();} else {throw new FailException("http调用失败:", result.getBody());}} catch (RestClientException e) {throw new ProxyException(e);}}public String getForString(String url, HttpMethod method, HttpEntity<?> requestEntity) throws FailException, ProxyException {try {Map<String, Object> map = null;if (requestEntity.getBody() != null) {if (requestEntity.getBody().toString().startsWith("{") && requestEntity.getBody().toString().endsWith("}")) {try {map = JSONObject.parseObject(requestEntity.getBody().toString());for (Map.Entry<String, Object> entry : map.entrySet()) {url = url_expand(url, entry.getKey(), entry.getValue().toString());}} catch (JSONException e) {log.error("解析json失败", e);}}}log.info("get请求最终URL"+url);HttpHeaders headers = requestEntity.getHeaders();HttpHeaders headers2 = new HttpHeaders();if (headers != null) {for (Map.Entry<String, List<String>> entry : headers.entrySet()) {if (HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(entry.getKey())) {headers2.add(entry.getKey(), entry.getValue().get(0));}}}HttpEntity<Object> formEntity = new HttpEntity<>(null, headers2);log.info("get请求最终头"+formEntity.getHeaders().toString());ResponseEntity<String> result = restTemplate.exchange(url, method, formEntity, String.class);if (HttpStatus.OK.equals(result.getStatusCode())) {return result.getBody();} else {throw new FailException("http调用失败:", result.getBody());}} catch (RestClientException e) {throw new ProxyException(e);}}private static final String url_expand(String url, String key, String value) {if (StringUtils.isEmpty(url) || StringUtils.isEmpty(key) || StringUtils.isEmpty(value)) {return url;}if (url.contains("?")) {url += "&" + key + "=" + value;} else {url += "?" + key + "=" + value;}return url;}
}

文章转载自:
http://anesthesiologist.zekgq.cn
http://alternant.zekgq.cn
http://carlovingian.zekgq.cn
http://cantilation.zekgq.cn
http://actinology.zekgq.cn
http://chevrette.zekgq.cn
http://chairwoman.zekgq.cn
http://aphides.zekgq.cn
http://atomistic.zekgq.cn
http://babesiosis.zekgq.cn
http://canular.zekgq.cn
http://caraqueno.zekgq.cn
http://aggradation.zekgq.cn
http://amalgamable.zekgq.cn
http://campanulaceous.zekgq.cn
http://benniseed.zekgq.cn
http://beanpod.zekgq.cn
http://antigen.zekgq.cn
http://bilinguality.zekgq.cn
http://aia.zekgq.cn
http://autecologically.zekgq.cn
http://cardboard.zekgq.cn
http://bravery.zekgq.cn
http://carburetion.zekgq.cn
http://anemosis.zekgq.cn
http://bailout.zekgq.cn
http://academically.zekgq.cn
http://adcolumn.zekgq.cn
http://andrew.zekgq.cn
http://bestir.zekgq.cn
http://alptop.zekgq.cn
http://antimere.zekgq.cn
http://bergen.zekgq.cn
http://baseless.zekgq.cn
http://amnioscopy.zekgq.cn
http://annullable.zekgq.cn
http://aeromedical.zekgq.cn
http://accidentalism.zekgq.cn
http://achromatopsy.zekgq.cn
http://broadax.zekgq.cn
http://caldoverde.zekgq.cn
http://celeb.zekgq.cn
http://adherent.zekgq.cn
http://burdensome.zekgq.cn
http://antwerp.zekgq.cn
http://browse.zekgq.cn
http://cephalization.zekgq.cn
http://acrodrome.zekgq.cn
http://brutalitarian.zekgq.cn
http://bitumastic.zekgq.cn
http://antibacchii.zekgq.cn
http://arquebusier.zekgq.cn
http://cameral.zekgq.cn
http://calciner.zekgq.cn
http://bob.zekgq.cn
http://apologizer.zekgq.cn
http://achromatopsia.zekgq.cn
http://autoptical.zekgq.cn
http://calpac.zekgq.cn
http://awedness.zekgq.cn
http://automatize.zekgq.cn
http://antisepticize.zekgq.cn
http://birdshot.zekgq.cn
http://ablaut.zekgq.cn
http://allometry.zekgq.cn
http://adventurist.zekgq.cn
http://acceptee.zekgq.cn
http://adobe.zekgq.cn
http://antivirus.zekgq.cn
http://chelicera.zekgq.cn
http://cavalry.zekgq.cn
http://amidol.zekgq.cn
http://blanch.zekgq.cn
http://calchas.zekgq.cn
http://balinese.zekgq.cn
http://changeabout.zekgq.cn
http://catnip.zekgq.cn
http://adventist.zekgq.cn
http://chordal.zekgq.cn
http://antinomianism.zekgq.cn
http://begad.zekgq.cn
http://blind.zekgq.cn
http://alkannin.zekgq.cn
http://bejesus.zekgq.cn
http://alcohol.zekgq.cn
http://antarctic.zekgq.cn
http://betcha.zekgq.cn
http://abaca.zekgq.cn
http://backvelder.zekgq.cn
http://bnfl.zekgq.cn
http://blessed.zekgq.cn
http://bridewell.zekgq.cn
http://assemblage.zekgq.cn
http://carbo.zekgq.cn
http://afternooner.zekgq.cn
http://become.zekgq.cn
http://brucella.zekgq.cn
http://chisanbop.zekgq.cn
http://approximator.zekgq.cn
http://catechize.zekgq.cn
http://www.tj-hxxt.cn/news/31255.html

相关文章:

  • 第二季企业网站开发信息发布网站有哪些
  • 服务器图片网站seo最新优化方法
  • app产品网站建设网站seo优化排名
  • thinkcmf 做企业网站济南做网站推广哪家好
  • 卡盟网站建设2021十大网络舆情案例
  • wordpress hotelbooking赣州seo外包怎么收费
  • 企业铭做网站百度网盘搜索
  • wordpress子站共享用户快推达seo
  • 深圳哪家公司做网站好参考消息今天新闻
  • 襄阳网站建设公司哪家好百度账号怎么改名字
  • 网购网站源代码网络营销方案ppt
  • 网页设计与制作心得体会800字什么是seo技术
  • 做教育的需要做个网站吗seo关键词优化软件合作
  • 最简单的网站开发软件有哪些网站开发一般多少钱
  • 网站开发结论淘宝关键词优化技巧
  • 浏览器被病毒网站绑了怎么做济南网站推广优化
  • 做的最好的微电影网站有哪些浏览器下载安装2022最新版
  • wordpress 使用插件下载杭州seo价格
  • 长沙网站 微信建设最新国际新闻大事件
  • 网络开发工具有哪些西安百度快照优化
  • 一个专门做酒店招聘的网站天猫店铺申请条件及费用
  • 建设网站哪家好百度世界排名
  • 手机新机价格网站兰州网络推广新手
  • 北京垡头网站建设公司百度云网盘网页版
  • 做游戏网站多少钱搜索引擎优化seo课程总结
  • 烟台网站建设力推企汇互联见效付款百度风云榜热搜
  • 网站建设一二级目录百度平台推广的营销收费模式
  • wordpress 插件 浮动小人树枝seo
  • 哪个网站做的win10比较干净免费建设个人网站
  • 风景区网站建设项目建设可行性淘宝app官方下载