客户提供了一个webapi接口,是基于SOAP格式的,我们需要访问其中一个函数,我们应该如何做。
我将以http://localhost:9990/hello.asmx接口,函数为HelloWho为例,说明一下。
.asmx是一种Web服务文件的扩展名,它是基于Microsoft ASP.NET技术构建的,用于实现SOAP(简单对象访问协议) Web服务。
.asmx
文件本身是一个XML文档,描述了Web服务的接口、方法、参数和返回值等信息。在调用
.asmx
文件中的Web服务时,客户端向服务器发送一个标准的SOAP请求,并处理来自服务器的标准的SOAP响应。通过这种方式,可以方便地实现跨平台的数据交换。
简单来讲,这种SOAP的web服务,发送和接收的信息都是XML格式的。与之对于的是基于REST的web服务,一般情况下是用json的。
除了基于SOAP(Simple Object Access Protocol)的Web服务,还有基于REST(Representational State Transfer)的Web服务。SOAP是一种基于XML的协议,用于在网络上交换结构化数据和调用Web服务。而REST是一种轻量级的Web服务架构风格,它使用HTTP协议中的GET、POST、PUT和DELETE等方法来实现资源的增加、删除、修改和查询。REST可以用XML,也可以用JSON,一般情况下使用JSON格式。
现在用C#建立一个asmx的服务器,代码如下。至于这个web服务器如何发布执行,这里不做详细处理,如有需要,自己百度即可,很简单的。
HelloWho函数如下图所示,URL为http://localhost:9990/hello.asmx?op=HelloWho
红色圈是要发给web接口的数据,代码里面用的是SOAP1.2格式
1.qt 访问web service
QString url = "http://localhost:9990/hello.asmx?op=HelloWho";
QString postStr =QString( "<soap12:Envelope xmlns:xsi="\
" \"http://www.w3.org/2001/XMLSchema-instance\" "\
"xmlns:xsd="\
"\"http://www.w3.org/2001/XMLSchema\""\
" xmlns:soap12="\
"\"http://www.w3.org/2003/05/soap-envelope\"> "\
"<soap12:Body>"\
"<HelloWho xmlns=\"http://tempuri.org/\">"\
"<name>%1</name>"\
"</HelloWho>"\
" </soap12:Body>"\
"</soap12:Envelope>").arg("-xiaoming");
QByteArray postData = postStr.toUtf8();
QNetworkAccessManager* manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished, this, [=](QNetworkReply* reply) {
if (reply->error()) {
qDebug() << "Error:" << reply->errorString();
return;
}
QString response = reply->readAll();
qDebug() << "Response:" << response;
});
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/xml;charset=utf-8");
//request.setRawHeader("SOAPAction", "\"http://tempuri.org/HelloWho\"");
request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(postData.size()));
manager->post(request, postData);
执行上面的程序,下面的是返回数据,<HelloWhoResult>包含的值Hello-xiaoming是函数HelloWho的返回。
<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWhoResponse
xmlns="http://tempuri.org/"><HelloWhoResult>Hello-xiaoming</HelloWhoResult>
</HelloWhoResponse></soap:Body></soap:Envelope>
2.C# 访问web service
在C#中右键添加服务引用,输入URLhttp://localhost:9990/hello.asmx,然后发现,得到命名空间ServiceReference1,按确定按钮。在解决方案中可以看到ServiceReference1。
下面是操作服务引用的代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WindowsFormsApp1.ServiceReference1;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ServiceReference1.helloSoapClient dd = new ServiceReference1.helloSoapClient();
string strHELLOWORLD = dd.HelloWorld();
string strHelloWhow = dd.HelloWho("taoshal");
}
}
}
(1条消息) 用qt来调用web服务器接口的代码资源-CSDN文库 可以在这里下载代码来看,没有设置需要积分,如果需要积分下载或其他,不是我干的。