带有Alamofire的Swift 2.0 soap请求发送xml参数

问题描述 投票:5回答:4

我想对此Web服务示例请求:http://www.holidaywebservice.com//HolidayService_v2/HolidayService2.asmx?wsdl

我需要发送一个参数“countryCode”。我不知道怎么能用alamofire做到这一点。以及如何获得解析xml结果的响应。

这就是我在邮差中所做的,但我想知道如何在快速中做同样的事情。 enter image description here

谢谢你的帮助。

xml swift soap alamofire
4个回答
2
投票

试试吧

  • 将发出POST请求
  • URL = http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl
  • 参数被发送到编码部分
  • encoding:.Custom =>
  • 创建了一个mutbleRequest
  • 一个。您可以直接使用URL或b。新网址
  • 重要的是mutableRequest.HTTBody,它是使用必要值放置soap-message的地方(类型String)
  • 标题可以根据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) }

注意:我的英语不是很好


2
投票

我写了一个用于将XML映射到对象的pod,称为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对象。


0
投票

我从github得到了这个:

Alamofire没有任何内置的SOAP或XML支持,因此您必须自己编写。幸运的是,创建自定义响应序列化程序非常简单,但XML解析由您决定。

至于参数,请查看文档,看看哪个内置编码与您的用例相匹配。


-3
投票

看看SOAPEngine.它支持Swift,似乎维护得很好。

© www.soinside.com 2019 - 2024. All rights reserved.