最近在做自助机,有个需求就是刷过磅卡获取车辆的过磅信息,那么就需要设备厂家提供接口,厂家那边是基于.net平台,他们为了自己方便,就只能提供WebService接口,那就没办法了,只能委屈自己。
WebService是Http+Soap报文的方式来请求响应的,既然是HTTP,那就好办了。我们先用浏览器直接访问一下WebService的接口,查看一下接口的相关信息,这个接口是采用的HTTP Authorization Basic Auth方式来保证接口安全的。
![](http://dingyue.ws.126.net/2021/1203/9efb6fc9j00r3ijzr000jc000yp00b7m.jpg)
输入对应的用户名和密码就可以成功的访问到接口了
![](http://dingyue.ws.126.net/2021/1203/4451382fj00r3ijzs003cc000z200i1m.jpg)
这里,我们能看到对应的报文,那么我们就用postman来试试效果,我们先设置一下postman里面的Authorization
![](http://dingyue.ws.126.net/2021/1203/0f36343ej00r3ijzs0014c0017t00c9m.jpg)
然后把报文复制到Body里面,然后直接点击Send,我以为会看到想要的结果,然而
![](http://dingyue.ws.126.net/2021/1203/792ec109j00r3ijzs001vc0010g00ggm.jpg)
其实这主要是Content-Type的原因,我们去把postman生成的Content-Type改为text/xml即可
![](http://dingyue.ws.126.net/2021/1203/1294337aj00r3ijzs0034c0014x00kam.jpg)
此时,我们来仔细看看我们的Headers里面的信息
可以看到Authorization这个信息,它里面的值是我们在前面设置Basic Auth的时候自动生成的,它的生成规则是Basic base64encode(username+":"+password)。既然postman能够调通了,那么我们就可以用程序直接调用了。
这里我用的HuTool的HTTP请求库,
private String buildXmlParams(String idCard, String orgId) { String xml = "\n" + " + " + " + " + idCard + "\n" + " + orgId + "\n" + " \n" + " \n" + ""; return xml; } String resultXml = HttpRequest.post("http://127.0.0.1/Web/db/Prod.asmx?op=fun_GetWeightBridge").body(buildXmlParams(idCard, orgId)).header("Content-Type", "text/xml;charset=utf-8").header("Authorization", "Basic dGVzdDp0ZXN0").execute().body();
\n"
\n"
\n"
"
"
使用HttpRequest发起请求,会收到返回的xml字符串,这里我们可以用HuTool提供的工具类来吧xml转为Map
Map result = new HashMap<>();XmlUtil.xmlToMap(resultXml, result);
剩下的如何操作就随意了,当然了,百度肯定有更好的方式,只是我觉得这种方式我用起来更方便一些。最近的工作量尤其庞大,又要开始做自助机了,C端准备用WPF,没办法,只得现学现做,硬着头皮上啊。
热门跟贴