2015-10-31 19 views
5

voglio fare una richiesta a questo esempio web service: http://www.holidaywebservice.com//HolidayService_v2/HolidayService2.asmx?wsdlSwift richiesta 2.0 sapone con Alamofire inviare parametri XML

ho bisogno di inviare un parametro "countryCode". Non so come posso farlo con alamofire. E come ottengo la risposta per analizzare il risultato xml.

Questo è come ho fatto in postino, ma voglio sapere come fare lo stesso in fretta. enter image description here

Grazie per il vostro aiuto.

+0

I parser come https://github.com/cezheng/Fuzi semplificano l'analisi di xml mediante i selettori XPath o CSS. È possibile definire il proprio serializzatore per questo. Dai uno sguardo a https://github.com/tristanhimmelman/AlamofireObjectMapper, che è un buon esempio di creazione dei tuoi serializzatori di risposta Alamofire – cezheng

risposta

0

ho ottenuto questo da github:

Alamofire non ha costruito nel SOAP o il supporto XML, in modo da dovreste avere per scrivere il proprio. Fortunatamente è semplice creare un serializzatore di risposta personalizzato , ma l'analisi XML dipende da voi.

Come per i parametri, dare un'occhiata alla documentazione e vedere quale della codifica integrata corrisponde al proprio caso d'uso.

-3

Date un'occhiata a SOAPEngine. Supporta Swift e sembra essere ben mantenuto.

+0

Qualsiasi aiuto in questo senso? : http://stackoverflow.com/questions/34867328/how-to-work-with-soap-web-service-and-xml-parsing-in-swift –

+3

Non è gratuito sdk –

2

Provalo

  • farà una richiesta POST
  • URL = http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl
  • I parametri sono inviati alla sezione di codifica
  • encoding: .custom =>
  • Creato un mutbleRequest
  • a. Puoi prendere direttamente URL o b. Nuovo URL
  • l'importante è mutableRequest.HTTBody, è dove il sapone messaggio sia posizionato con i valori necessari (tipo stringa)
  • intestazioni può variare dal secondo al servizio Web e API, in un caso può avere login/password/token o solo autorizzazione

  • la riga -> "Tipo di contenuto": o "Lunghezza contenuto" dipende dalla situazione.

  • SWXMLHash.parse (response.data!) È quello di gestire la risposta, la tua può vedere di più in [AlamoFire/Uso/Manipolazione di risposta] (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) 
    } 
    

Nota: Il mio inglese non è molto buono

+0

sarebbe utile se si aggiungesse un spiegazione del tuo codice per la tua risposta –

+0

controlla ora, cerco di spiegare –

2

Ho scritto un pod per mappare XML agli oggetti, chiamato XMLMapper. (utilizza la stessa tecnica di ObjectMapper)

È possibile utilizzare il sottosistema Requests per creare facilmente richieste SOAP.

Innanzitutto creare il proprio personalizzato SOAPMessage:

class HolidayServiceMessage: SOAPMessage { 

    var countryCode: String? 

    override func mapping(map: XMLMap) { 
     super.mapping(map: map) 

     countryCode <- map["m:countrycode"] 
    } 
} 

quindi creare la SOAPEnvelope come:

let soapMessage = HolidayServiceMessage(soapAction: "GetHolidaysAvaible", nameSpace: "http://holidaywebservice.com/HolidayService_v2") 
soapMessage.countryCode = "UnitedStates" 

let soapEnvelope = SOAPEnvelope(soapMessage: soapMessage) 

inviare Finaly richiesta SOAP utilizzando 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")) 

è possibile mappare il Risposta XML agli oggetti rapidi usando il protocollo XMLMappable.

Problemi correlati