curl⽀持ws吗_使⽤CURL请求WebService字痕随⾏
之前有⼀篇⽂章(通过SSL\HTTPS调⽤WebService)介绍过如何使⽤HTTPS协议调⽤WebService,使⽤那篇⽂章介绍的⽅法确实可以解决⼤部分问题,但是总有⼀⼩波问题必须通过其它⼿段解决。
按理论来说,WebService是跨平台数据通信的最佳解决⽅案,⽽且实际上当我们解决两个独⽴系统的数据互通或互调时,⾸先想到的⽅案也必定是使⽤WebService。但是有时候天不遂⼈愿,⽐如我就碰到了⼀例:A系统使⽤ASP.NET开发,并且部署于Windows平台上,现在需要调⽤B系统中的数据,⽽B系统使⽤JSP开发且部署于Linux系统上,然后噩梦开始了,在VS的项⽬中添加Web引⽤时,就会出现如下的错误:
添加不上引⽤怎么办,试试模拟HTTP-POST请求吧,⽽且的确可以这么做,只不过⿇烦⼀些,信⼼满满的写好代码,然后运⾏,直接报错,⽽且是相同的错误:
怎么办?到这其实已经没有办法了,因为这是HttpWebRequest对象抛出来的底层错误,其实这个错误是由于两边安全通道⽆法建⽴所引起的,经过资料的查应该是.NET使⽤的证书和Java使⽤的证书协议不同⽽引起的,⼤概是这么个意思,反正你就是⽆法解决了,因为你不可能改变HttpWebRequest的源码。
⾄此,就需要换⼀个思路了,能不能不使⽤.NET提供的通信类来实现调⽤,换⼀个第三⽅组件,这个组件必须跟.NET毫⽆关系,于是Google或者Baidu吧。通过反复的查,到了CURL,它的介绍如下:
curl是利⽤URL语法在命令⾏⽅式下⼯作的开源⽂件传输⼯具。它被⼴泛应⽤在Unix、多种Linux发⾏版中,并且有DOS和Win32、
Win64下的移植版本。licurl则提供给开发者,⽤于使⽤C++跨平台的开发各种⽹络协议的请求及响应。
C#调⽤C++组件理论上是可以的,但是当前没⼯夫看它的源码和使⽤,重要的是实现,如何请求WebService并获得返回的数据。
⾄其官⽹下载Win平台下的版本,同时需要下载OpenSSL的动态链接库,将所需的⽂件放置在同⼀⽬录下,如下图:
在使⽤之前需要了解⼀下curl⼯具的有效参数的意义(注意,参数区分⼤⼩写):
-k:允许不使⽤证书请求SSL站点。
-H:⾃定义头信息传递给服务器。
-d:以HTTP POST⽅式传送数据。
curl是什么命令
返回的数据会跟在此命令之下,这⾥需要注意的是,如果请求WebService,⼀般发送的数据主体都为xml格式的字符串,⽽且其中肯定包含如同下⾯的字符:
将此字符串直接作为数据主体输⼊,肯定会报错的,正确的格式为:
最后,整体的思路应该是这样的:
1.获取curl⼯具,确保能够正确运⾏。
2.编写所需的curl命令,并且能够通过测试。
3.使⽤System.Diagnostics.Process启动cmd命令⾏⼯具,调⽤curl命令请求WebService。
4.从该cmd⼯具的输出流中获取返回的数据。
5.解析获得有效数据。
⾄此,问题暂时可以解决,其实⽐较好的办法是使⽤C++封装⼀个动态链接库,然后在项⽬中引⽤,这样既稳定⼜⾼效,使⽤CMD命令⾏这种⽅式只是⼀种暂时的替代⽅式。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论