【问题标题】:Open Url from Swift 3.0从 Swift 3.0 打开 URL
【发布时间】:2026-02-17 15:30:01
【问题描述】:

我正在使用 Swift 3.0 构建一个应用程序,当用户单击 UIButton 时,我想打开一个 URL。

网址如下:“192.169.1.19/RELE-3”

所以,我正在构建这段代码:

func sendHttpRequest(endPoint : String){
        let url = URL(string: endPoint)!
        var request = URLRequest(url: url)
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        request.httpMethod = "GET"
        /*let parameters: [String: Any] = [
        "id": 13,
        "name": "Jack & Jill"
        ]*/
        //request.httpBody = parameters.percentEscaped().data(using: .utf8)

        let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data,
            let response = response as? HTTPURLResponse,
            error == nil else {                                              // check for fundamental networking error
                print("error", error ?? "Unknown error")
                return
            }

            guard (200 ... 299) ~= response.statusCode else {                    // check for http errors
                print("statusCode should be 2xx, but is \(response.statusCode)")
                print("response = \(response)")
                return
            }

            let responseString = String(data: data, encoding: .utf8)
            print("responseString = \(responseString)")
            }

        task.resume()
    }

如果我尝试启动应用程序并调用此函数,我没有任何错误但页面没有被调用。

【问题讨论】:

  • 可能是url有问题...检查一下
  • 您需要在 info.plist 中启用 NSAppTransportSecurity 以支持不安全的 http 连接。
  • 你说“我想打开一个 URL”和“我没有任何错误但页面没有被调用”。你想做什么?加载网页?如果是这样,那你就完全错了。您编写的代码将从 HTTP 网站读取数据,但不会在网页上显示该数据。为此,您需要使用其中一个 openURL 命令在 Safari 中调用 URL,或者您需要创建一个 Web 视图并告诉它打开您的 URL。
  • 好的,伙计们,问题出在 URL 上。我已经修复它,现在我可以调用那个 URL,但是我不知道为什么但是方法 sendHttpRequest 被调用了两次,这不好
  • 但这将是一个不同的问题。你已经简单地解决了这个问题,所以请删除它。

标签: ios swift xcode url


【解决方案1】:

可能是 ATS 问题。 以源代码格式打开 Plist 并在下面添加代码。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>192.169.1.19</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
</dict>

添加键值为 true 的 Allow Arbitrary Loads 可以解决,但不推荐。

【讨论】: