Swift 原生网络请求

2023-10-30

iOS HTTP请求原生组要的类是URLSession,是一个单例类。

  • 例1:GET
func makeLogon() {
	// 构建URL
    let url:URL = URL(string: "https://xxx/xxx/API?xxx")!
    // 发送HTTP请求的的session对象
    let session = URLSession.shared
    // 构建请求request
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    // 发一个get请求
    let task = session.dataTask(with: request as URLRequest) {(
        data, response, error) in
        
        guard let data = data, let _:URLResponse = response, error == nil else {
            print("error")
            return
        }
        let dataString =  String(data: data, encoding: String.Encoding.utf8)
        let dict = self.getDictionaryFromJSONString(jsonString: dataString!)
        print(dict)
    }
    task.resume()
}

func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{
    let jsonData:Data = jsonString.data(using: .utf8)!
    let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
    if dict != nil {
        return dict as! NSDictionary
    }
    return NSDictionary()
}
  • 例2 POST
func makeUpdateCountSheet() {
	// 这里直接使用 jsonString 转成字典,然后转成 Data,将 流 放到 request的 httpBody中, 模拟发送一个http请求
    let jsonString = "{\"Data\":{\"xxx\":\"834\",\"xxx\":[{\"xxx\":[{\"xxx\":\"031019\",\"xxx\":\"ADD\",\"xxx\":\"9\"},{\"xxx\":\"5651G-06920ADBAA\",\"xxx\":\"ADD\",\"xxx\":\"6\"}],\"xxx\":\"xxx\",\"Counted\":true,\"xxx\":true,\"LineNum\":\"1\",\"xxx\":\"235\",\"Quantity\":\"15\"}],\"xxx\":\"\",\"Initials\":\"we\",\"xxx\":true},\"xxx\":\"\"}"
    let dict = self.getDictionaryFromJSONString(jsonString: jsonString)
    print(dict)
    var  jsonData = NSData()
    do {
         jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted) as NSData
    } catch {
        print(error.localizedDescription)
    }
	// 构建URL
    let url:URL = URL(string: "https://xxx/xxx/API?xxx")!
    // session
    let session = URLSession.shared
    // request
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    // 设置Content-Length,非必须
    request.setValue("\(jsonData.length)", forHTTPHeaderField: "Content-Length")
    // 设置 Content-Type 为 json 类型
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    // POST	请求将 数据 放置到 请求体中
    request.httpBody = jsonData as Data
    // 发送请求
    let task = session.dataTask(with: request as URLRequest) {(
        data, response, error) in

        guard let data = data, let _:URLResponse = response, error == nil else {
            print("error")
            return
        }
        // 返回值 utf8 转码
        let dataString =  String(data: data, encoding: String.Encoding.utf8)
        // 将 jsonString 转成字典
        let dict = self.getDictionaryFromJSONString(jsonString: dataString!)
        print(dict)
    }
    task.resume()
}

表象上GET请求体中没有数据,参数都在URL中,而POST请求将数据放置到请求体中。本质上GET和POST是没什么区别的,所以上面两个例子其实是一样一样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 原生网络请求 的相关文章

  • swift-网络-URLSession学习

    URLSession 在 2013年随着 iOS7 的发布一起面世的 xff0c 苹果对它的定位是作为 NSURLConnection 的替代者 xff0c 在 iOS9 之后苹果官方已经移除了 NSURLConnection xff0c
  • Swift Property ‘self.xxx‘ not initialized at super.init call

    Swift重写父类的init方法时 报了如下错误 Property self xxx not initialized at super init call 大概意思是在调用父类init方法前 需要给属性赋值 报错代码 required in
  • 下载视频并保存至手机相册

    功能介绍 需要将转码后的视频 小于20MB 通过APP下载至手机相册 可以将小视频分享至微信传播 1 通过服务器转码视频 或者很多云服务商都会提供这个功能 2 通过APP下载至手机相册 这个是咱们需要做的事 主要技术 用到 URLSessi
  • Swift工程main函数去哪里了?

    有些东西很简单 但是我还是把它记录了下来 main 函数是所有应用程序的入口 C C Python等所有的应用程序都有且仅有一个main函数作为程序的入口 Swift创建一个新的工程 项目文件中怎么没有main 函数 用OC创建一个新项目后
  • iOS系统语音识别-Swift

    基于Speech框架 实现语音识别转文字功能 系统要求 gt iOS 10 以下是在官方提供的Demo基础上稍作改动 目的有两个 实现连续不间断地语音识别 除非自己手动调用停止 报错自动重新启动 应用切后台后再次进入前台后语音可以正常使用
  • Swift基础语法快速浏览

    有些东西很简单 但是我还是把它记录了下来 文章目录 推荐阅读 基础语法快速浏览 基础 值类型转化 控制流 方法 类和对象 枚举和结构体 协议和扩展 错误处理 泛型 推荐阅读 the swift programming language sw
  • iOS PopoverController

    iOS PopoverController 背景 UIPopoverController 在iOS9 0 已废弃 UIKIT EXTERN API DEPRECATED UIPopoverController is deprecated P
  • Swift里的元组和可选类型

    文章目录 元组 Tuples 定义一个元组 元组作为函数的返回值 元组的适用范围 可选类型 Optionals 定义可选类型 示例分析 Optional中使用nil 元组 Tuples 元组将多个值分组为一个复合值 元祖中的值可以是任何类型
  • Swift set/get方法

    Swift 中重写属性的set和get方法 Swift中如何重写属性的set和get方法 set和get方法的本质是什么 set和get方法紧跟着属性后面写 很紧凑 也清楚 class Person NSObject var name st
  • swift UITextField 设置leftView不生效

    swift 给UITextField 设置了 leftView 但是不显示 设置UITextField的光标输入位置 设置UITextField的leftView 但是没显示 视图层上也没有 let iamgeView UIImageVie
  • 纯代码构建Swift工程

    有些东西很简单 但是我还是把它记录了下来 使用Storyboard创建一个新的项目后 应用程序从闪屏 到主窗口 再到第一个界面经过的文件分别是 LaunchScreen storyboard gt Main storyboard gt Vi
  • [!] Unable to determine Swift version for the following pods:

    问题 Unable to determine Swift version for the following pods contact the author or set the SWIFT VERSION attribute pod in
  • Error Domain=NSCocoaErrorDomain Code=3840 “Invalid value around character 4104.

    使用Alamofire发了一个GET请求 出现了如下错误 responseSerializationFailed reason Alamofire AFError ResponseSerializationFailureReason jso
  • 如何在 Swift 中存根 URLSession?

    我一直在关注这个tutorial存根URLSession 这个例子是通过创建一个协议并扩展现有协议来完成的URLSession protocol URLSessionProtocol typealias DataTaskResult Dat
  • 将 CURL 转换为 URLRequest

    我正在尝试将 Swagger 给我的以下卷曲请求转换为 URLRequest curl X GET header Accept application json header Authorization key ttn account v2
  • 如何使用 swift 5 URLSession 中引入的新结果类型?

    Swift 5 引入了新的 Result 类型来处理异步函数的结果 我想知道如何在 URLSession 中使用这个新的结果类型 我有以下代码 func getCategorByAPI Base Url is from an static
  • 使用 begin​Background​Task​With​Expiration​Handler​ 进行上传

    来自doc https developer apple com reference uikit uiapplication 1623031 beginbackgroundtaskwithexpiratio看起来上传文件是一个很好的用例beg
  • 如何模拟 URLSession.DataTaskPublisher

    我该如何嘲笑URLSession DataTaskPublisher 我有课Proxy需要注入一个URLSessionProtocol protocol URLSessionProtocol func loadData from url U
  • 使用Combine,如何在网络请求后取消分配订阅

    如果您使用组合来处理网络请求URLSession 那么你需要保存Subscription 又名 AnyCancellable 否则它会立即释放 从而取消网络请求 稍后 当网络响应被处理后 您想要取消分配订阅 因为保留它会浪费内存 下面是执行
  • 为什么NWPathMonitor状态总是满足?

    当没有连接时 我从 URL 会话中收到一条错误消息 指出请求超时 我正在使用网络协议来事先检查连接情况 但显然当我在内部调用它时这不起作用viewDidLoad static func startUpdateProcess let moni

随机推荐

  • 计算绕原点旋转某角度后的点的坐标

    问题 A点 x y 按顺时针旋转 theta 角度后点的坐标为A1点 x1 y1 求x1 y1坐标用 x y 和 theta 来表示 方法一 设 OA 向量和x轴的角度为 alpha 那么顺时针转过 theta后 OA1 向量和x轴的角度为
  • loadrunner压力fullgc

    loadrunner 打压力的时候 我们会根据jconsole来监控被压系统的内存 cpu fullgc等 当出现内存溢出或者fullgc 见下图 既内存溢出 又有fullgc 要先查看jvm的配置 好多技术都使用的默认配置 那么就要调试j
  • 编写软著的基本常识

    1 背景介绍 1 1 软著的概念 软著即软件著作权 市面上任何一个APP在编写完毕之后都会向国家版权中心去申请著作权对自己的软件进行知识产权保护 对于一个系统来说 可以对系统的功能模块进行拆分 分别进行软著的申请 也就相当于一个系统可以申请
  • 关于阿里云ECS服务器提示高危漏洞问题的处理

    购买阿里云服务器后 一段时间 会发钱提示高危漏洞 而且很多 有高危 中危 低危 严重等几个等级 当点击 一键修复或者生成修复命令时 开始让买买买了就 关于这个问题自己手动修复的话 采用软件升级一般都可以解决 除了提示带kernel的高危漏洞
  • 送书

    最好的挣钱方式是钱生钱 怎样钱生钱呢 钱生钱可以通过投资 例如买股票 基金等方式 有人可能说买股票基金发财 我没这样的命和运气 买股票基金靠的不只有命运和运气 更多靠的是长期的经验和对股票基金数据的分析 今天我们使用scrapy框架来js逆
  • C#和Java,究竟选哪个方向?我只说事实,你自己分析……

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • netty源码分析(十四)Netty初始化流程总结及Channel与ChannelHandlerContext作用域分析

    我们回到ServerBootstrap的init方法 之前介绍过Attribute的设置 那么Attribute的具体设置是怎样的呢 void init Channel channel throws Exception final Map
  • MySQL深度探险(二)-- MySQL系统架构详解

    一 逻辑模块组成 总的来说 MySQL 可以看成是二层架构 第一层我们通常叫做SQL Layer 在 MySQL 数 据库系统处理底层数据之前的所有工作都是在这一层完成的 包括权限判断 sql 解析 执 行计划优化 query cache
  • 联想笔记本安装win10 ubuntu配置步骤

    一 准备ubuntu分区 在win10下用磁盘管理工具 磁盘管理工具可以右键我的电脑 gt 属性 gt 磁盘管理工具打开 选中安装ubuntu的目标硬盘 右键 gt 压缩卷 会自动计算出可以分出的空间大小 根据自己需求进行压缩 压缩后会生成
  • Python中让代码 BUG 变得酷炫的利器

    当我们写的一个脚本或程序发生各种不可预知的异常时 如果我们没有进行捕获处理的时候 通常都会致使程序崩溃退出 并且会在终端打印出一堆 密密麻麻 的 traceback 堆栈信息来告诉我们 是哪个地方出了问题 就像这样子 天呐 密集恐惧症要犯了
  • 剑指offer-16 链表反转

    法一 package Leetcode ListNode Author YCKJ3803 Date 2021 3 2 22 39 Description 反转链表 最经典的题 yyds public class ReverseListNod
  • API安全

    1 API的简介 API代表应用程序编程接口 它由一组允许软件组件进行通信的定义和协议组成 作为软件系统之间的中介 API使软件应用程序或服务能够共享数据和功能 但是API不仅仅提供连接基础 它还管理软件应用程序如何被允许进行通信和交互 A
  • 带分数 -- 蓝桥杯

    带分数 蓝桥杯 题目描述 100 可以表示为带分数的形式 100 3 69258714 还可以表示为 100 82 3546197 注意特征 带分数中 数字 1 9 分别出现且只出现一次 不包含 0 类似这样的带分数 100 有 11 种表
  • 虚拟机不能上网以及无法ping通百度的解决方案

    虚拟机无法上网 看了许多博客也没有解决问题 最后自己钻研文档解决了 此处分享一下 1 点击此处编辑 2 选择虚拟网络编辑器 3 点击更改设置 4 选择v8 并将使用本地DHCP选项勾选掉 注 此处为nat模式 5 手动输入子网IP 子网掩码
  • 微信公众号支付java前后端分离开发

    微信公众号支付java前后端分离开发 微信公众号支付java前后端分离开发 我们开发的是基于河北银行的支付 支付宝微信都做了 这里就介绍一下微信公众号支付 这个公众号支付需要配置的东西太多了 官方文档写的跟s一样 看不懂 一点一点自摸索的
  • C++ Array size()实例讲解

    描述 C 函数std array size 用于获取数组中存在的元素数 声明 以下是 std array size 函数形式 std array 标头的声明 constexpr size type size noexcept 参数 空 返回
  • jxl读取excel封装成List、Map

    一 封装成List 数据格式为List
  • Moving On 第 44 届 ACM/ICPC 亚洲区域赛(银川)网络赛

    Firdaws and Fatinah are living in a country with nnn cities numbered from 111 to nnn Each city has a risk of kidnapping
  • osgEarth的Rex引擎原理分析(四十四)如何控制父子TileNode节点的显隐

    目标 三十七 中的105 rex渲染出的地球是靠一块块TileNode瓦片拼接起来的 瓦片之间存在父子关系 一般显示父TileNode就不应显示子TileNode 反之亦然 那么rex是如何做这种显隐控制呢 1 每一个TileNode瓦片在
  • Swift 原生网络请求

    iOS HTTP请求原生组要的类是URLSession 是一个单例类 例1 GET func makeLogon 构建URL let url URL URL string https xxx xxx API xxx 发送HTTP请求的的se