我想对此Web服务示例发出请求:http://www.holidaywebservice.com//HolidayService_v2/HolidayService2.asmx?wsdl
我需要发送一个参数" countryCode"。我不知道如何用alamofire做到这一点。以及如何获得解析xml结果的响应。
这就是我在邮递员中的表现,但我想知道如何在快递中做同样的事情。
感谢您的帮助。
答案 0 :(得分:2)
试试吧
Headers可能因Web服务和API而异,在一种情况下可以有登录/密码/令牌或仅授权
该行 - > “Content-Type”:或“Content-Length”取决于具体情况。
SWXMLHash.parse(response.data!)是处理响应的,您可以在[AlamoFire / Usage / Response Handling](https://github.com/Alamofire/Alamofire)中看到更多信息
Alamofire.request(.POST, "http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl",
parameters: nil,
encoding: .Custom({
(convertible, params) in
//a.
let mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest
// or
//b.
mutableRequest.URL =NSURL(string: theUrlString)
let mutableReques02 = NSMutableURLRequest(URL: theURL!)
//
//mutableReques02.HTTPBody =....
mutableRequest.HTTPBody =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"urn:sap-com:document:sap:rfc:functions\"><SOAP-ENV:Body>
<hs:GetHolidaysAvaible>
<hs:countrycode> UnitedStates</hs:countrycode>
</hs:GetHolidaysAvaible>
</SOAP-ENV:Body></SOAP-ENV:Envelope>".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
return (mutableRequest, nil)}),
headers:
["Username": "login", // Login API
"Password": "password" , // Password API
"AuthenticatedToken" : "35432", // Authenticated API
"Authorization": "Basic nasiouynvo8eyt829409", // Authenticated API
"Accept" : "text/xml",
"Content-Type" : "text/xml; charset=UTF-8", // Type content and charset accept
"Accept-Charset" : "UTF-8",])
.responsePropertyList { response in
let xml = SWXMLHash.parse(response.data!)
print(xml)
}
注意:我的英语不是很好
答案 1 :(得分:2)
我编写了一个用于将XML映射到对象的窗格,称为XMLMapper。 (使用与ObjectMapper相同的技术)
您可以使用Requests subspec轻松创建SOAP请求。
首先创建自己的自定义SOAPMessage
:
class HolidayServiceMessage: SOAPMessage {
var countryCode: String?
override func mapping(map: XMLMap) {
super.mapping(map: map)
countryCode <- map["m:countrycode"]
}
}
然后创建SOAPEnvelope,如:
let soapMessage = HolidayServiceMessage(soapAction: "GetHolidaysAvaible", nameSpace: "http://holidaywebservice.com/HolidayService_v2")
soapMessage.countryCode = "UnitedStates"
let soapEnvelope = SOAPEnvelope(soapMessage: soapMessage)
最终使用Alamofire发送SOAP请求:
Alamofire.request("http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl", method: .post, parameters: soapEnvelope.toXML(), encoding: XMLEncoding.soap(withAction: "http://holidaywebservice.com/HolidayService_v2#GetHolidaysAvaible"))
您可以使用XMLMappable
协议将XML响应映射到swift对象。
答案 2 :(得分:0)
我是从github得到的:
Alamofire没有任何内置的SOAP或XML支持,所以你有 写你自己的。幸运的是,创建自定义很简单 响应序列化程序,但XML解析由您决定。
至于参数,请查看文档并查看哪些 内置编码与您的用例匹配。
答案 3 :(得分:-3)
看看SOAPEngine.它支持Swift,似乎维护得很好。