我正在查找如何在Dart中执行SOAP请求。在查看HTTPRequest时,它实际上只提到了RESTful服务,并希望确保这样做。
现在,我有我的服务器,用户名和密码。试图通过该服务获得成功的身份验证,这样我就可以在进行后续调用时传递一个身份验证令牌。
例如,在.NET中,它执行以下操作,然后将凭证存储在服务器端会话变量中,我将其用作在Dart中进行此操作的起点。
// create web service api object
WebServiceAPI api = new WebServiceAPI();
if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["ProxyUserName"]))
{
System.Net.NetworkCredential nc = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["ProxyUserName"], ConfigurationManager.AppSettings["ProxyPassword"], ConfigurationManager.AppSettings["ProxyDomain"]);
System.Net.CredentialCache cc = new System.Net.CredentialCache();
cc.Add(new Uri(api.Url), "NTLM", nc);
api.Credentials = cc;
}
api.AuthenticateCredential("api@admin", "admin", 0, 0);
HttpContext.Current.Session["api"] = api;
编辑:我正在添加一些示例数据,以便如果存在黑客,我们可以利用它来获取某些工作,我们可能会抽象它并进行泛化。
service asmx file:
http://127.0.0.1:1337/service.asmx
Method we will be calling: (AuthenticateCredential)
http://127.0.0.1:1337/service.asmx?op=AuthenticateCredential
The sample SOAP request:
POST /service.asmx HTTP/1.1
Host: 127.0.0.1
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://foo.com/bar/320/Default/AuthenticateCredential"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AuthenticateCredential xmlns="http://foo.com/barr/320/Default">
<UserName>string</UserName>
<Password>string</Password>
<CurrentSystemLoginID>int</CurrentSystemLoginID>
<CurrentCustomerID>int</CurrentCustomerID>
</AuthenticateCredential>
</soap:Body>
</soap:Envelope>
然后很自然地,我将不得不写出并修改string,string,int,int
信封。这样凭证是正确的。
答案 0 :(得分:3)
我使用Dart为Blackboard的Web服务执行了SOAP操作,因此它是可能的。为此,我必须以编程方式为每个请求构建SOAP信封。请求本身是使用http包的'post'方法发送的。
无法说明您的请求应如何设置,这取决于您尝试访问的网络服务。对于HTTP标头,我发送了'text-type'的'text / xml; charset = utf-8'和指定SOAP方法的'SOAPAction'标头。身体是完整的SOAP信封。
您可能需要玩一下以使用您的服务所需的正确格式/信息来构建信封。我使用xml包来解析/解释响应。
答案 1 :(得分:2)
AFAIK没有解决方案。 Dart只有有限的XML包,我没有看到过实现SOAP本身的尝试。 一种可能的解决方法是委托用另一种语言编写的服务器将REST调用转发为SOAP调用。
答案 2 :(得分:0)