swift - 为什么我无法从此 https 请求接收值?

标签 swift http https request

有谁知道这可能出什么问题吗?

每次我在模拟器中测试时,请求都会返回值“请输入名称”。

就像 https 请求根本没有发生一样。

import UIKit

class AgeLookUpViewController: UIViewController {
    @IBOutlet weak var celebrityTextField: UITextField!
    @IBOutlet weak var resultLabel: UILabel!

    @IBAction func getAge(_ sender: Any) {
        if let url = URL(string: "https://en.wikipedia.org/wiki/" + celebrityTextField.text!.replacingOccurrences(of: " ", with: "_")) {
            let request = NSMutableURLRequest(url: url)
            let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
                var message = ""

                if error != nil {
                    print(error!)
                } else {
                    if let unwrappedData = data {
                        let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)

                        var stringSeparator = "<span class=\"noprint ForceAgeToShow\">(age&#160;"

                        if let contentArray = dataString?.components(separatedBy: stringSeparator) {
                            if contentArray.count > 1 {
                                stringSeparator = ")</span>"

                                let newContentArray = contentArray[1].components(separatedBy: stringSeparator)

                                if newContentArray.count > 1 {
                                    message = newContentArray[1]
                                    print(message)
                                }
                            }
                        }
                    }
                }

                if message == "" {
                    message = "Please Enter a Name"
                }

                DispatchQueue.main.sync(execute: {
                    self.resultLabel.text = message
                })
            }

            task.resume()
        } else {
            resultLabel.text = "Age is unavailable at this time. Please try again later."
        }
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

人的年龄应作为结果标签中的结果返回。

最佳答案

检查我更新的代码。我发现请求正常进行并打印响应。 (用 dataString 检查打印语句)。它失败的地方是在响应之后。我收到“未找到年龄内容 2”。

import UIKit

if let url = URL(string: "https://en.wikipedia.org/wiki/Bill_Gates") {
    let request = NSMutableURLRequest(url: url)
    let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
        var message = ""

        if error != nil {
            print(error!)
        } else {
            if let unwrappedData = data {
                let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)

                print(dataString) // checks whether the actual request went through or not.

                var stringSeparator = "<span class=\"noprint ForceAgeToShow\">(age&#160;"

                if let contentArray = dataString?.components(separatedBy: stringSeparator) {
                    if contentArray.count > 1 {
                        stringSeparator = ")</span>"

                        let newContentArray = contentArray[1].components(separatedBy: stringSeparator)

                        if newContentArray.count > 1 {
                            message = newContentArray[1]
                            print(message)
                        } else {
                            print("NO age content found 1")
                        }
                    } else {
                        print("NO age content found 2")
                    }
                } else {
                    print("NO age component found")
                }
            }
        }

        if message == "" {
            message = "Please Enter a Name"
        }

        DispatchQueue.main.sync(execute: {
           print(message)
        })
    }

    task.resume()
}

就您而言,如果未打印响应,我建议您检查 info.plist 中提供的互联网权限。

查看此链接以获取更多信息。

https://guides.codepath.com/ios/Internet-Permissions

关于swift - 为什么我无法从此 https 请求接收值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54375135/

相关文章:

Swift 优化 if else 条件

ios - ITMS-90809 : Deprecated API Usage -- Apple will stop accepting submissions of apps that use UIWebView APIs

ios - 列表中的奇怪按钮行为(SwiftUI)

java - 从输入流中解析 multipart/form-data 的库和示例

c - 无法识别指令名称 "SCGIMount"

ios - 更改按钮的 PDF 矢量图像的 tintColor

java - 获取响应的响应字符集以获取或发布请求

php - 在通过 HTTP 下载数据之前确定文件大小

带有 https 和未签名证书的 Spring HTTP 调用程序

ssl - 表彰机器名称和 IP 地址的自签名证书