Xcode7.0及iOS9.0之后Xcode支持HTTP请求

背景

苹果公司在2015年在Xcode7.0中开始强制支持HTTPS协议,并引入 ATS(App Transport Security)。之后的版本中默认仅支持 HTTPS协议请求。

问题

在最新Xcode版本中使用HTTP请求地址(如下集成代码):

// http
    @IBAction func httpRequestAction(_ sender: Any) {
        print("http request action")
        // http 示例
        if let url = URL(string: "http://xxx.xxx.xxx:xxxx/xxx/xxx/xxx") {
            fetchData(from: url) { data, response, error in
                if let error = error {
                    print("Error: \(error)")
                } else if let data = data {
                    // 处理获取到的数据
                    print("Data: \(String(decoding: data, as: UTF8.self))")
                } else {
                    print("No data returned.")
                }
            }
        }
    }

    // 定义一个函数来执行GET请求
    func fetchData(from url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> Void) {
        let task = URLSession.shared.dataTask(with: url) { data, response, error in
            completion(data, response, error)
        }
        task.resume()
    }

运行上面代码,我们可以在打印日志中看到如下错误提示:

分析

由上面的调试可以知道使用HTTP协议在Xcode项目中与服务端交互数据,需要遵循苹果的App Transport Security 政策。

苹果提供了两种配置支持HTTP协议:

Exception Domains:这种需要指定服务器域名URL

Allow Arbitrary Loads:支持加载所有的URL

第一种使用范围较窄,本文示范的是第二种方式。

行动

Xcode 项目中找到 Info.plist 文件

添加如下代码:

	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>

设置值为 YES

我们就配置好的支持HTTP请求。

调试

运行项目,触发事件我们可以看到如下图

服务端数据已经正确的打印在控制台了。

结尾

相关配置视频及调试Demo已上传至云盘,限时领取:

通过网盘分享的文件:App Transport Security Settings
链接: https://pan.baidu.com/s/1a_K2HenTCgjVeIkVmL9kZg?pwd=a4ec 提取码: a4ec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值