IOS Swift Call Web Service using SOAP -
i have looked through answers how call web service via soap form swift on internet , found answers. have tried implement code have found in answers continually http 400 status code. trying figure our doing wrong.
i have distilled problem down few lines of code in view controller seen below code called when button on ui pressed. web service trying call can found @ http://www.cgsapi.com/cgswebservice.asmx.
(to view wsdl file append ?wsdl end of url.)
import uikit class viewcontroller: uiviewcontroller { var is_soapmessage: string = "<soapenv:envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:cgs=\"http://www.cgsapi.com/\"><soapenv:header/><soapenv:body><cgs:getsystemstatus/></soapenv:body></soapenv:envelope>" override func viewdidload() { super.viewdidload() // additional setup after loading view, typically nib. } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } @ibaction func btnclicked(sender: anyobject) { var is_url: string = "http://www.cgsapi.com/cgswebservice.asmx" var lobj_request = nsmutableurlrequest(url: nsurl(string: is_url)!) var session = nsurlsession.sharedsession() var err: nserror? lobj_request.httpmethod = "post" lobj_request.addvalue("www.cgsapi.com", forhttpheaderfield: "host") lobj_request.addvalue("text/xml; charset=utf-8", forhttpheaderfield: "content-type") //lobj_request.addvalue(string(count(is_soapmessage)), forhttpheaderfield: "content-length") lobj_request.addvalue("223", forhttpheaderfield: "content-length") lobj_request.addvalue("http://www.cgsapi.com/getsystemstatus", forhttpheaderfield: "soapaction") var task = session.datataskwithrequest(lobj_request, completionhandler: {data, response, error -> void in println("response: \(response)") var strdata = nsstring(data: data, encoding: nsutf8stringencoding) println("body: \(strdata)") if error != nil { println("error: " + error.description) } }) task.resume() } }
any idea why getting http 400 status when call this?
so being silly. main missed setting body of message soap request. updated corrected code below:
// // viewcontroller.swift // testwebservicesoap // // created george m. ceaser jr on 6/2/15. // copyright (c) 2015 george m. ceaser jr. rights reserved. // import uikit class viewcontroller: uiviewcontroller { var is_soapmessage: string = "<soapenv:envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:cgs=\"http://www.cgsapi.com/\"><soapenv:header/><soapenv:body><cgs:getsystemstatus/></soapenv:body></soapenv:envelope>" override func viewdidload() { super.viewdidload() // additional setup after loading view, typically nib. } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } @ibaction func btnclicked(sender: anyobject) { var is_url: string = "http://www.cgsapi.com/cgswebservice.asmx" var lobj_request = nsmutableurlrequest(url: nsurl(string: is_url)!) var session = nsurlsession.sharedsession() var err: nserror? lobj_request.httpmethod = "post" lobj_request.httpbody = is_soapmessage.datausingencoding(nsutf8stringencoding) lobj_request.addvalue("www.cgsapi.com", forhttpheaderfield: "host") lobj_request.addvalue("text/xml; charset=utf-8", forhttpheaderfield: "content-type") lobj_request.addvalue(string(count(is_soapmessage)), forhttpheaderfield: "content-length") //lobj_request.addvalue("223", forhttpheaderfield: "content-length") lobj_request.addvalue("http://www.cgsapi.com/getsystemstatus", forhttpheaderfield: "soapaction") var task = session.datataskwithrequest(lobj_request, completionhandler: {data, response, error -> void in println("response: \(response)") var strdata = nsstring(data: data, encoding: nsutf8stringencoding) println("body: \(strdata)") if error != nil { println("error: " + error.description) } }) task.resume() } }
Comments
Post a Comment