【问题标题】:Network API to return HTTPS response in iPhone网络 API 在 iPhone 中返回 HTTPS 响应
【发布时间】:2015-06-07 11:28:42
【问题描述】:

我能否使用 iPhone 中的任何网络 API(如 AFNetworking、MKNetworkKit 等)将服务器响应从任何函数返回到其调用函数。

目前我正在使用 NSURLRequest 的 httpGet 函数。我做了以下函数,但我无法将服务器响应返回给它的调用函数。请帮帮我。

func connserv(jsonString:NSDictionary) -> NSDictionary{
    var abc: NSDictionary?
    // This is the action performed when clicked on the Connect button on the connectivity screen
    println("------------------Function connserv")

    let prefs = NSUserDefaults.standardUserDefaults()
    var IP: AnyObject = prefs.objectForKey("IP")!
    var port: AnyObject = prefs.objectForKey("Port")!
    println("IP in Connection : \(IP)")
    println("port in Connection : \(port)")
    prefs.synchronize()
    //var learn = LearnNSURLSession()
    let localizedModel = UIDevice.currentDevice().localizedModel
    let model = UIDevice.currentDevice().model
    let devicesystemVersion = UIDevice.currentDevice().systemVersion

    println("HTTP request jsonString : \(jsonString)")
    var request = NSMutableURLRequest(URL: NSURL(string: "https://\(IP):\(port)/")!)

    var response: NSURLResponse?
    var error: NSError?

    //println("HTTP request jsonString : \(jsonString)")

    var err: NSError?
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(jsonString, options: nil, error: &err)
    request.HTTPMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setValue("application/json", forHTTPHeaderField: "Accept")
    // send the request
    var learn = LearnNSURLSession()
    println("HTTP request : \(request)")
    learn.httpGet(request) {
        (resultString, error) -> Void in
        if error != nil
        {
            println("completion block")

        }
        else
        {
            let data = (resultString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
            var er: NSError?
            let JSONdata: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers,error: &er)!

            let abc: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves, error:&er)!

            println("abc : \(abc)")
            println("JSONdata : \(JSONdata)")

            learn.callback(result: resultString, error: error)
        }
    }
    //return abc!;
}

【问题讨论】:

    标签: swift https nsurlrequest xcode-6.2


    【解决方案1】:

    我不知道您的 LearnNSURLSession 课程是如何工作的,所以我无法提出解决方案。但这里是如何从 NSURLConnection 中找到返回的标头和状态,以及返回的数据和任何错误信息,记录在 here:

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.currentQueue(), completionHandler: {
            response, data, error in
            if let response = response as? NSHTTPURLResponse {
                debugPrintln(response.allHeaderFields)
                let statusCode = response.statusCode
                debugPrintln("statusCode: \(statusCode): \(NSHTTPURLResponse.localizedStringForStatusCode(statusCode))")
            } else { println("That's odd.") }
        })
    

    虽然该文档表明响应是 NSURLResponse,但 this page 明确表示您将获得包含所有标题和状态的 NSHTTPURLResponse。

    如果你需要一个同步版本,它会停止函数直到它得到结果,你可以使用this call instead,像这样:

    var response:NSURLResponse?
    var e: NSError?
    NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &e)
    debugPrintln(response)
    

    这将允许您向调用者返回有意义的结果。

    【讨论】:

    • Emrys57,我得到了来自服务器的响应和所有内容。它没有问题。我想将服务器响应返回给 connserv 函数的调用函数。问题就在那里。我希望你现在有一个更好的主意
    • 我会试试的。我不能在异步连接中做同样的事情吗?
    • 异步连接的全部意义在于建立连接的函数在连接完成之前返回。因此,它无法将连接结果返回给调用代码。
    • Emrys57,你能告诉我如何建立同步连接并在其中发送 JSON 请求。
    • 您可以将我在答案中的代码“sendSynchronousRequest”与您在问题中创建的请求一起使用。使用 debugPrintln 查看响应以确定您想要返回给调用者的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2022-10-25
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多