VC++ 2010调用JAVA webservers 带HTTP头验证
Hessian是搞定了,还有一个接口 webservers ,蛮熟悉的。应该没什么技术含量的了(但往往认为简单的东西确可能搞的很复杂,不管你信不信、、反正哥是信了)。用SOAP 协议,先装微软的SOAPTOOKIT3.0,看下soap toolkit 上的帮助文档,有demo 下来一看正好,调试一把,调用成功,返回不正确。。。。一直搞不清楚,,最后问java服务端的开发人员,才知道 他们会有一个MD5加密的东西只给一串哪密后的东西,具体放哪也不清楚,这它的坑爹呀。想来想去 还是一哥们提示了一下,用一个抓包软件,抓C#调javawebservers的包(C#调用javawebservers已经成功) 抓来一看,HTTP头中 User-Agent 后带一串验证信息。
POST /By/ServiceHTTP/1.1
User-Agent:“验证信息 不公开”
Content-Type:text/xml; charset=utf-8
SOAPAction:""
Host: 10.1.100.213
Content-Length: 1147
Expect: 100-continue
Connection:Keep-Alive
再抓我用soapTOOLKIT发送的包 发现User-Agent信息对不上。。就是他了 验证信息就放在User-Agent后面。想着只要能操纵SOAP发送的HTTP头就OK了,但看了半天SOAPTOOKIT的帮助文档。也没发现有操作HTTP head的函数。
无赖之下GOOGLE一堆。又转向CURL,这真是个好东东啊。。拿过来一看,什么都可以改,二下把HTTP头内容改掉。现在另一上问题出来了,之前用SOAP TOOKIT发送HTTPBODY 现在用CURL 怎么搞呢,手动拼字符串,拼个字符包,太不灵活了,又有一个想法,能不能用SOAP TOOKIT生成SOAP包但不发送,生成soap包 用一个函数获取这个包再用curl发送,但看了半天文档,一方面全是英文的,头晕,没找到一个函数呀,,算了还是用MSXML吧,生成一个xml包,生成时候 因为SOAP xml包内容如下
<?xml version="1.0"encoding="utf-8"?>
<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><allotACTestxmlns="http://manage.wms.###.com"><in0xmlns="">HELLO WORLD this istest</in0></allotACTest></soap:Body></soap:Envelope>
注意到xml会包含命名空间,生成时也遇到一点麻烦,好在都解决了
现在生成了,POST过去OK
成功接收到的xml包
<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ns1:allotACTestResponsexmlns:ns1="http://manage.wms.###.com"><ns1:out>Current timeis Tue Apr 23 15:30:19 CST 2013; your send is HELLO WORLD this istest</ns1:out></ns1:allotACTestResponse></soap:Body></soap:Envelope>
收到 包后得自己再写一个函数取xml里面属性值的,可以用MSXML也可以 自己写 函数。提取字符串的方法
总结:不管是HESSIAN 还是 WEBSERVERS,说到底都是SOKET,SOKET发送XML文件 发一个接一个,OK 。。