веб-сервисы — отправка почтового запроса в php webservice не возвращает никакого значения в swift 2

Я хочу вызвать или отправить запрос в мой php-веб-сервис, который генерирует ответ в формате xml, и мне нужно проанализировать эти данные, чтобы получить звуковую ссылку, и отправить ее плееру.

Я написал код ниже, но когда я отлаживаю его, ответ не возвращается.

любое предложение?

  var soapMsg = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body<getSounds xmlns=\"http://test.com/soap/tv\"><Language></Language></getSounds></soap:Body></soap:Envelope>"

let urlString: String = "http://test.com/tv/soapServices.php?wsdl"var url: NSURL = NSURL(string: urlString)!
//var request: NSURLRequest = NSURLRequest(URL: url)
var request = NSMutableURLRequest(URL: url)
var msgLength = String(soapMsg.characters.count)

request.HTTPMethod = "POST"request.HTTPBody = soapMsg.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.addValue(msgLength, forHTTPHeaderField: "Content-Length")
request.addValue("http://bee.myservice.com/userLogin", forHTTPHeaderField: "Action")var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)!
connection.start()
print(request)

var response: NSURLResponse?

//                        var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: nil) as NSData?
do{

var data = try NSURLConnection.sendSynchronousRequest(request , returningResponse: &response)

if let httpResponse = response as? NSHTTPURLResponse {
//                            print(<#T##items: Any...##Any#>)("error \(httpResponse.statusCode)")
print(response)
}
}
catch{
print("error")
}

введите описание изображения здесь

0

Решение

реализовать методы делегата,

func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
// Recieved a new request, clear out the data object
self.data = NSMutableData()
}

func connection(connection: NSURLConnection!, didReceiveData conData: NSData!) {
// Append the recieved chunk of data to our data object
// If the connection is receiving some data
self.data.appendData(conData)
}

func connectionDidFinishLoading(connection: NSURLConnection!) {
// Request complete, self.data should now hold the resulting info
let responseString: NSString = NSString(data: self.responseData, encoding: NSUTF8StringEncoding);
println(responseString)
}

Здесь self.data — это переменная типа NSMutableData (), в которой хранится XML-ответ. если все работает нормально, responseString должен напечатать XML.

P.S не забудь это
class YourClass : NSObject, NSURLConnectionDelegate

1

Другие решения

В вашем коде есть ошибка,

Вы должны использовать делегат метод

Для получения ответа вы должны написать делегат метод в NSURLConnection.

Спасибо..

0

Я нашел решение для своего вопроса, и я подумал, что поделюсь им с другими, кто хочет его использовать.

Я использовал SOAPEngine для обработки запросов на мыло. Github и вот как я использовал его в Swift 2:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var SoundTitle:NSArray = [NSArray]()
var soundfile:NSArray = [NSArray]()
var soap = [SOAPEngine]()

@IBOutlet var table: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

let soap = SOAPEngine()
soap.userAgent = "SOAPEngine"soap.actionNamespaceSlash = true
soap.licenseKey = "eJJDzkPK9Xx+p5cOH7w0Q+AvPdgK1fzWWuUpMaYCq3r1mwf36Ocw6dn0+CLjRaOiSjfXaFQBWMi+TxCpxVF/FA=="//soap.responseHeader = true // use only for non standard MS-SOAP service

//        soap.setValue("1", forKey: "Language")//sending post variables to field one
soap.setIntegerValue(1, forKey: "Language")//sending post variable to field two
soap.requestURL("http://test.com/tv/soapServices.php",
soapAction: "http://test.com/tv/soapServices.php/getSounds",
completeWithDictionary: { (statusCode : Int, dict : [NSObject : AnyObject]!) -> Void in

var book:Dictionary = dict as Dictionary
//                print(book)
//                print(book["Title"])
let soundfile : NSArray = book["SoundPath"] as! NSArray
let SoundTitle : NSArray = book["Title"] as! NSArray

self.soundfile = soundfile
self.SoundTitle = SoundTitle
self.table.reloadData()}) { (error : NSError!) -> Void in

NSLog("%@", error)
}
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.soundfile.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

var cell:UITableViewCell? = self.table.dequeueReusableCellWithIdentifier("cell") as UITableViewCell?
if cell == nil
{
cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
}

let sound_file : String = self.soundfile[indexPath.row] as! String
let sound_title : String = self.SoundTitle[indexPath.row] as! Stringcell!.textLabel?.text = sound_title
cell!.textLabel!.textAlignment = .Right
cell!.detailTextLabel?.text = sound_filereturn cell!
}

}
0
По вопросам рекламы [email protected]