IOS 13 网络请求和Moya框架

news2024/11/15 12:30:19

允许HTTP请求

从iOS9开始,推荐使用HTTPS,如果使用的HTTP,默认情况下会出现如下错误:

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

这是因为iOS9引入了新特性App Transport Security (ATS),他要求App内网络请求必须使用HTTPS协议,也就是默认情况下,不允许发送HTTP请求,但我们这里后端实现的API是HTTP协议,虽然后端课程中讲解了HTTPS,但为了降低课程难度,这里我们先允许HTTP请求,后面在讲解HTTPS请求。

解决方法是要么改为HTTPS,要么声明可以使用HTTP,可以声明部分使用HTTP,也可以所有;但需要说明的是如果APP内所有请求都是HTTP,那么如果要上架App Store的时候基本都会被拒。

源码方式更改

这种方式是直接编辑配置文件。打开工程下的Info.plist文件,在文件dict标签内添加如下内容:

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

意思是允许使用HTTP,当然还可以配置指定的域名使用HTTP,我们这里是配置所有域名。

可视化更改

通过可视化编辑器。找到:

App Transport Security Settings,下面的Allow Arbitrary Loads设置为Yes。

网络框架

OC常用的是AFNetworking,Swift常用的Moya,本文使用Moya网络请求框架。

添加依赖

# 网络请求框架
# https://github.com/Moya/Moya
pod 'Moya'

还不了解如何使用 CocoaPods 管理依赖的,建议先看前面的文章:IOS 01 CocoaPods 安装与使用 

添加完依赖后,看一下Pods文件夹里面是否添加成功。 

配置请求相关地址 

//
//  Config.swift
//  MyCloudMusic
//
//  Created by jin on 2024/8/22.
//

import Foundation

class Config {
    /**
     * 是否是调试模式
     * 是因为单独定了一个变量更方便,不用真正更改项目的编译模式
     */
    static let DEBUG = true

    /// BaseURL
    static let ENDPOINT = "http://my-cloud-music-api-sp3-dev.ixuea.com/"

    /**
     * 资源端点
     */
    static let RESOURCE_ENDPOINT = "http://course-music-dev.ixuea.com/"
}

定义Service

框架文档推荐使用枚举,本文也使用枚举进行定义。 

//
//  DefaultService.swift
//  网络API
//
//  Created by jin on 2024/8/22.
//

import Foundation

//导入网络框架
import Moya

enum DefaultService{
    case ads(position:Int)
    
    case sheets(size:Int)
    
    case register(data:User)
}

// MARK: - 实现TargetType协议
extension DefaultService : TargetType{
    
    /// 返回网址
    var baseURL: URL {
        return URL(string: Config.ENDPOINT)!
    }
    
    /// 返回每个请求的路径
    var path: String {
        switch(self){
        case .ads(_):
             return "v1/ads"
        case .sheets:
             return "v1/sheets"
        case .register:
             return "v1/users"
        default:
             fatalError("DefaultService path is null")
        }
    }
    
    /// 请求方式
    var method: Moya.Method {
        switch(self){
        case .register:
            return .post
        default:
            return .get
        }
    }
    
    /// 请求的参数
    var task: Moya.Task {
        switch(self){
        case .ads(let position):
            return ParamUtil.urlRequestParamters(["position":position])
        case .sheets(let size):
            return ParamUtil.urlRequestParamters(["size":size])
        default:
            //不传递任何参数
            return .requestPlain
        }
    }
    
    /// 请求头
    var headers: [String : String]? {
        var headers:Dictionary<String,String> = [:]
        
        return headers
    }
    
    
}

 定义参数相关工具类

//
//  ParamUtil.swift
//  参数相关工具类
//
//  Created by jin on 2024/8/22.
//

import Foundation

import Moya

class ParamUtil{
    
    /// 返回URL编码的参数
    ///
    /// - Parameter parameters: <#parameters description#>
    static func urlRequestParamters(_ data:[String:Any]) -> Task {
        return .requestParameters(parameters: data, encoding: URLEncoding.default)
    }
}

请求接口

let provider = MoyaProvider<DefaultService>()
provider.request(.sheets(size: VALUE10)) { result in
	print(result)
	switch(result){
	case let .success(response):
		let data = response.data // Data, your JSON response is probably in here!
		let statusCode = response.statusCode // Int - 200, 401, 500, etc

		let dataString = String(data: data, encoding: .utf8)!
		print("request network success \(statusCode) \(dataString)")
	case let .failure(error):
		print("request network error \(error)")
	}
}

至此,简单的实现了Moya框架的依赖和使用。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中俄联袂 助力前行 点燃希望——助残义诊在杭州邦尔骨科医院顺利举行

8月26日&#xff0c;由杭州市残疾人联合会主办、临平区残疾人联合会承办&#xff0c;杭州市邦尔骨科医院协办的“中俄联袂 助力前行 点燃希望”助残义诊活动在该院1号楼门诊大厅顺利进行。此次活动得到了俄罗斯伊里扎洛夫中心医院和杭州市邦尔骨科医院专家的大力支持。 本次义诊…

珈创生物业绩下滑:毛利率连年大降,产能利用率滑坡仍募资扩产

《港湾商业观察》廖紫雯 日前&#xff0c;武汉珈创生物技术股份有限公司&#xff08;以下简称&#xff1a;珈创生物&#xff09;于北交所证券交易中心披露招股书&#xff0c;保荐机构为国投证券。 珈创生物往年IPO进程可谓一波三折。2020年12月&#xff0c;公司曾申报沪交所科…

双向NAT应用场景和配置

域内双向NAT&#xff08;端口回流&#xff09; 局域网内有一台或多台服务器可能需要对外映射提供服务&#xff0c;如内网终端也需要访问&#xff0c;这时如终端通过映射后的公网地址访问会出现无法访问的情况&#xff0c;这时就需要域内双向NAT&#xff08;华三很多路由器会有…

window下kafka3启动多个

准备工作 我们先安装好kafka&#xff0c;并保证启动成功&#xff0c;可参考文章Windows下安装Kafka3-CSDN博客 复制kafka安装文件 kafka3已经内置了zookeeper&#xff0c;所以直接复制就行了 修改zookeeper配置文件 这里我们修改zookeeper配置文件&#xff0c;主要是快照地址…

学习分享:手把手教你使用Python开发一个api数据接口

今天想和大家分享一下Python开发语言&#xff0c;为什么选择Python&#xff0c;因为当今生活中人工智能无处不在&#xff0c;而开发人工智能的首选语言必是Python。今天教大家使用Python开发一个api接口。 Python的开发环境我使用的是PyCharm&#xff0c;安装完成之后创建项目…

单域名SSL证书快速获取指南

在当今互联网的社会&#xff0c;网站安全变得非常重要。SSL证书&#xff0c;作为实现网站HTTPS加密通信的重要手段&#xff0c;不仅能够保护用户数据传输的安全&#xff0c;还能提升网站的信任度和搜索引擎排名等。其中单域名SSL证书是可以保护单个域名的网站&#xff0c;这对于…

TensorBoard快速入门

一、简介 TensorBoard是一套 Web 应用程序&#xff0c;用于检查和了解 TensorFlow 运行和图形。简而言之&#xff0c;就是用于机器学习可视化的工具 TensorBoard 设计为完全离线运行&#xff0c;无需任何 Internet 访问权限。例如&#xff0c;这可能位于本地计算机上、公司防…

团队合作新风向:2024年8款协作工具榜单

文章介绍了以下几个团队协作工具&#xff1a;1. Worktile&#xff1b;2. PingCode&#xff1b;3. 飞书&#xff1b;4. 钉钉&#xff1b;5. Wrike&#xff1b;6. 云之家&#xff1b;7. Tapd&#xff1b;8. Slack。 在2024年&#xff0c;随着远程工作和分布式团队的普及&#xff…

从消费市场看电动汽车和充电桩互动关系

中国电动汽车充电基础设施促进联盟&#xff08;以下简称促进联盟&#xff09;日前发布的最新统计数据显示&#xff0c;7月全国新增公共充电桩8.8万台&#xff0c;同比增长45.2%&#xff0c;连续多月保持同比四成以上增长&#xff1b;今年前7个月全国充电基础设施增量为200.8万台…

MATLAB绘图基础1:MATLAB基础回顾

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 1.MATLAB基础回顾 1.1 MATLAB语言特点 M A T L A B {\rm MATLAB} MATLAB是一种解释型语言&#xff0c;允许用户逐步执行命令并立即查看结果&#xff1b; M A T L A B {\rm MATLAB} MATLAB拥有…

1996-2022年各省农村用电量数据(无缺失)

1996-2022年各省农村用电量数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1996-2022年 2、来源&#xff1a;国家统计局、农村统计年鉴、电力企业联合会 3、指标&#xff1a;农村用电量 4、范围&#xff1a;31省 5、缺失情况&#xff1a;无缺失 6、指标说明&…

SAP与生产制造MPM系统集成案例

一、需求介绍 某公司为保证企业内部生产管理系统的多项基础数据的同步更新&#xff0c;确保各模块间信息的一致性和准确性&#xff0c;对后续的生产计划和物料管理打下基础&#xff0c;该公司将MPM系统和SAP系统经过SAP PO中间件集成平台进行了集成。MPM全称为Manufacturing…

面临快开学的孩子们,快看看莱莉是怎么利用数字时钟调整作息时间的吧!

网管小贾 / sysadm.cc “是谁订的西兰花匹萨&#xff1f;” “快吃我吧&#xff0c;我是有机的&#xff01;” 哦&#xff0c;糟糕&#xff01;莱莉昨晚又做恶梦了…… “不知道为什么&#xff0c;这几天总是翻来覆去的&#xff0c;莱莉看样子似乎不太走运&#xff01;” 厌…

Spark自定义函数例子

spark自定义函数&#xff0c;Spark sql 使用和dataFrame方式使用 #自定义函数名字 def convert_zdy(sex):return "男" if sex 1 else "女"if __name__ __main__:spark SparkSession.builder.master("local[*]").appName("自定义函数&qu…

PHP Vue学生档案管理系统:如何实现快速信息检索与数据安全?

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

echarts最新封装柱状图

父元素传入一次最多显示几个以及每次切换几个超出没两秒向右切换一个图表加载有动画效果动态更新数据实时显示屏幕尺寸改变自动适应字体大小自适应数值为0时&#xff0c;柱设置最小高度 组件 BarChart.vue <template><div class"w100 h100"><divref…

本专业不好找工作,也许可以试试嵌入式 嵌入式学习路线 从C语言到MCU开发

引言 到了毕业季&#xff0c;很多朋友仔细如何学习嵌入式&#xff0c;这个问题其实很难以回答&#xff0c;每个人的具体情况都不一样&#xff0c;也没有什么万能的方法&#xff0c;保证大家都能学好嵌入式。本篇文章&#xff0c;博主将结合我自己的经历和理解&#xff0c;谈论下…

案例研究:如何在复杂环境中增强自组织

现有价值流的重组代表了管理者在敏捷转型的背景下所面对的最大可能的战术挑战。它直接影响到组织交付和影响既定社会结构的能力。它也在两个域之间的边界上&#xff1a;繁杂且复杂&#xff1b;目标结构的某些方面以经验为基础&#xff0c;具有一定的确定性&#xff0c;但我们无…

【Hot100】LeetCode—131. 分割回文串

目录 1- 思路回溯 2- 实现⭐131. 分割回文串——题解思路 3- ACM 实现 原题链接&#xff1a;131. 分割回文串 1- 思路 回溯 思路&#xff1a;需要一个判断回文的函数 回溯思路&#xff1a; 回溯过程遍历的是 字符串 s 参数为 startIndex&#xff0c;主要用来处理到 起始点 通…

【Linux篇】环境变量

1. env命令 环境变量是操作系统在运行的时候&#xff0c;记录的一些关键性信息&#xff0c;辅助系统运行。 在Linux系统中执行env命令即可查看当前系统中记录的环境变量。 环境变量是一种key-value型结构&#xff0c;即名称和值。 2. 环境变量&#xff1a;PATH 在前面提出的…