2015-10-31 2 views
5

Я хочу, чтобы сделать запрос на этом примере веб-службы: http://www.holidaywebservice.com//HolidayService_v2/HolidayService2.asmx?wsdlSwift запрос 2,0 мыло с Alamofire отправить параметры XML

Мне нужно отправить один параметр «COUNTRYCODE». Я не знаю, как это сделать с помощью alamofire. И как я получаю ответ, чтобы разобрать результат xml.

Это как я сделал в почтальоне, но я хочу знать, как сделать то же самое в быстром. enter image description here

Благодарим за помощь.

+0

Парсеров, таких как https://github.com/cezheng/Fuzi, облегчит вам анализ XML-файлов с помощью селекторов XPath или CSS. Вы можете определить для него свой собственный сериализатор. Взгляните на https://github.com/tristanhimmelman/AlamofireObjectMapper, что является хорошим примером создания ваших собственных сериализаторов ответов Alamofire. – cezheng

ответ

0

Я получил это от GitHub:

Alamofire не имеет встроенной в SOAP или поддержки XML, так что вам придется написать свой собственный. К счастью, просто создать настраиваемый сериализатор ответов , но анализ XML зависит от вас.

Что касается параметров, ознакомьтесь с документацией и посмотрите, какая из встроенной кодировки соответствует вашему прецеденту.

-3

Посмотрите на SOAPEngine. Он поддерживает Swift и, кажется, в хорошем состоянии.

+0

Любая помощь с этим? : http://stackoverflow.com/questions/34867328/how-to-work-with-soap-web-service-and-xml-parsing-in-swift –

+3

Это не бесплатный sdk –

2

Попробуйте

  • Сделает пост запрос
  • URL = http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl
  • Параметры передаются в секцию
  • кодирования кодирования: .custom =>
  • Создано mutbleRequest
  • a. Вы можете напрямую использовать URL или b. Новый URL
  • важным является mutableRequest.HTTBody, это где мыльный сообщение помещается с необходимыми значениями (тип String)
  • заголовки могут варьироваться от в зависимости от веб-службы и API, в одном случае может есть логин/пароль/токен или только авторизация

  • строка -> «Тип содержимого»: или «Длина контента» зависит от ситуации.

  • 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) 
    } 
    

Примечание: Мой английский не очень хорошо

+0

, это поможет, если вы добавите объяснение вашего кода на ваш ответ –

+0

проверить сейчас, я попробую объяснить –

2

Я написал блок для отображения XML в объекты, называемый XMLMapper. (используется тот же метод, что и у ObjectMapper)

Вы можете использовать подпрограмму Requests для создания запросов 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) 

Finaly отправить запрос SOAP с помощью Alamofire:

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")) 

можно сопоставить Ответ XML на быстрые объекты с использованием протокола XMLMappable.

Смежные вопросы