【iOS】网络请求GET与POST

【iOS】网络请求GET与POST

  • 前沿
  • 一. GET与POST的共同点
  • 二. GET与POST的不同点
  • 三. 实现方式
  • 总结

前沿

HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息,个人认为这是GET和POST的本质区别,也是协议设计者的本意,其它区别都是具体表现形式的差异 。

一. GET与POST的共同点

  • 都是常见的HTTP请求方法,用于与服务器进行通信。都是常见的HTTP请求方法,用于与服务器进行通信。
  • 都可以传输数据和与服务器进行交互。
  • 都可以在请求头中设置自定义的HTTP头字段。
  • 都可以使用SSL/TLS进行安全传输。

二. GET与POST的不同点

  • 数据传输方式:
    GET方法:使用GET方法时,请求参数会附加在URL的查询字符串中,以键值对的形式发送给服务器。
    POST方法:使用POST方法时,请求参数会包含在请求体中。
  • 安全性:
    GET方法:由于GET请求的参数暴露在URL中,可能被浏览器历史记录、代理服务器等记录和获取,因此不适合传输敏感信息。
    POST方法:POST请求的参数包含在请求体中,相对于GET请求更安全,适合传输敏感信息。
  • 数据长度限制:
    GET方法:由于GET请求的参数附加在URL中,URL的长度有限制,不同浏览器和服务器对URL长度的限制也不同。
    POST方法:POST请求的参数包含在请求体中,没有像URL一样的长度限制,但服务器端也可能对请求体的大小进行限制。

三. 实现方式

首先来看一下get方法的使用,
GET方法

- (void) Getofinformation {//1.创建URL对象NSURL* url = [NSURL URLWithString:@"https://news-at.zhihu.com/api/4/news/before/20231124"];//2.创建回话 session支持三种类型的任务//  NSURLSessionDataTask //加载数据//  NSURLSessionDataDownloadTask  //下载//  NSURLSessionDataUploadTask  //上传NSURLSession* session = [NSURLSession sharedSession];//3.创建请求任务 (该方法内部默认使用的是get方法)直接进行url的传递NSURLSessionTask* datetask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (!error) {NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];NSLog(@"请求成功");NSLog(@"%@", json[@"date"]);for (int i = 0; i < 5; i++) {NSLog(@"%@", json[@"stories"][i][@"title"]);}} else {NSLog(@"请求失败");}}];//4.开始任务[datetask resume];}

上面是以知乎日报的API为例,展示一下get方法的运行的结果。
在这里插入图片描述
POST方法

- (void) Postoinformation {//post//1.创建URL对象NSURL* url = [NSURL URLWithString:@"https://news-at.zhihu.com/api/4/news/before/20231124"];//2.创建请求对象//第一个参数是你的URL//第二个参数是请求的缓存策略//第三个参数是设置请求超时时间NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];//3.设置请求方法为post[request setHTTPMethod:@"POST"];//4.设置请求头信息//key(头字段名(不区分大小写)):Content-Type,//Value(头字段值)为下面三种:(还是得根据后台给的来设置)//application/x-www-form-urlencoded(后台接收为分开的参数时,如?name=liyu&password=123)//application/json(后台接收为json对象时)//multipart/form-data(上传文件时)[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];//5.设置请求体NSString* param = [NSString stringWithFormat:@"uesrname=%@&pwd=%@", self.nameString, self.password];//把拼接后的字符串转换为data,设置请求体(这个data就是请求体)request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];//6.建立会话 session支持三种类型的任务//    NSURLSessionDataTask  //加载数据//    NSURLSessionDownloadTask  //下载//    NSURLSessionUploadTask   //上传NSURLSession* session =[NSURLSession sharedSession];//7.创建请求任务NSURLSessionDataTask* dataTask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (!error) {NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];NSLog(@"请求成功");NSLog(@"%@", json[@"date"]);for (int i = 0; i < 5; i++) {NSLog(@"%@", json[@"stories"][i][@"title"]);}} else {NSLog(@"请求失败");}}];//8.启动任务[dataTask resume];
}

正如上面的代码中网络请求的默认方法为GET,如果要使用其他方法需要设置 [request setHTTPMethod:@“POST”],然后将拼接好的参数作为请求体附加到HTTP请求中,以便在发送POST请求时将数据传输到服务器端。

总结

从上边两个不难看出两个的区别,无非就是post多了一个请求体,其他的也没什么区别,但是post的好处还有很多,首先它的保密性和安全性就比较高,所以以后我们还是尽量多使用post请求数据的好,另外上述说的仅仅只是使用系统自带方法的代码,当然你也可以使用第三方库,比如AFNetworking它使用起来就更加方便。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

护眼灯有效果吗?考研必备护眼台灯推荐

据统计&#xff0c;中国人口的近视率约为10%至20%。 国家卫健委发布的中国首份眼健康白皮书显示&#xff0c;我国小学生近视率为47.2%&#xff0c;初中生近视率为75.8%&#xff0c;大学生近视率超过90%。据世界卫生组织统计数据显示&#xff0c;目前全球约有14亿近视人口&#…

【C语言】深入理解C语言中的数学运算和类型转换

文章目录 引言取负运算的奥秘源码探索分析与解读 浮点数运算的精细差异源码分析精度损失与隐式类型转换 精度和除零运算探究float类型和double类型的精度各是多少&#xff08;即十进制有效位的位数&#xff09;&#xff1f;在你的机器上&#xff0c;“负数开方”是如何处理的&a…

LeetCode题:174. 地下城游戏

目录 一、题目要求 二、解题思路 &#xff08;1&#xff09;状态表示 &#xff08;2&#xff09;状态转移方程 &#xff08;3&#xff09;初始化dp表 &#xff08;4&#xff09;填表顺序 &#xff08;5&#xff09;返回值 三、代码 一、题目要求 174. 地下城游戏 恶魔们…

关于什么是 JVM

关于什么是 JVM&#xff0c;看看普通⼈和⾼⼿的回答。 普通人 JVM 就是 Java 虚拟机&#xff0c;是⽤来运⾏我们平时所写的 Java 代码的。优点是它会 ⾃动进⾏内存管理和垃圾回收&#xff0c;缺点是⼀旦发⽣问题&#xff0c;要是不了解 JVM 的运⾏ 机制&#xff0c; 就很难…

C#中GDI+绘图应用(柱形图、折线图和饼形图)

目录 一、柱形图 1.示例源码 2.生成效果 二、折线图 1.示例源码 2.生成效果 三、饼形图 1.示例源码 2.生成效果 GDI绘制的一些常用的图形&#xff0c;其中包括柱形图、折线图和饼形图。 一、柱形图 柱形图也称为条形图&#xff0c;是程序开发中比较常用的一种图表技术…

2024年网络安全行业前景和技术自学

很多人不知道网络安全发展前景好吗&#xff1f;学习网络安全能做什么&#xff1f;今天为大家解答下 先说结论&#xff0c;网络安全的前景必然是超级好的 作为一个有丰富Web安全攻防、渗透领域老工程师&#xff0c;之前也写了不少网络安全技术相关的文章&#xff0c;不少读者朋…

vuepress-----19、自动生成侧边栏

自动生成侧边栏插件 https://github.com/shanyuhai123/vuepress-plugin-auto-sidebar https://shanyuhai123.github.io/vuepress-plugin-auto-sidebar/ 安装 npm i vuepress-plugin-auto-sidebar -Dmodule.exports {plugins: [["vuepress-plugin-auto-sidebar",…

【抽象策略模式】实践

前言 刚果商城&#xff0c;用户登录 Or 注册 发送邮箱验证码场景&#xff0c;使用抽象策略模式实现 什么是抽象策略模式 抽象策略模式是一种行为型设计模式&#xff0c;它允许定义一系列算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以互相替换。这使得客户端代码…

牛客在线编程(SQL大厂面试真题)

1.各个视频的平均完播率_牛客题霸_牛客网 ROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time d…

NSS [NSSCTF 2022 Spring Recruit]babyphp

NSS [NSSCTF 2022 Spring Recruit]babyphp 考点&#xff1a;PHP特性 开局源码直接裸奔 <?php highlight_file(__FILE__); include_once(flag.php);if(isset($_POST[a])&&!preg_match(/[0-9]/,$_POST[a])&&intval($_POST[a])){if(isset($_POST[b1])&&…

【K8s】Kubernetes CRD 介绍(控制器)

文章目录 CRD 概述1. 操作CRD1.1 创建 CRD1.2 操作 CRD 2. 其他笔记2.1 Kubectl 发现机制2.2 校验 CR2.3 简称和属性 3. 架构设计3.1 控制器概览 参考 CRD 概述 CR&#xff08;Custom Resource&#xff09;其实就是在 Kubernetes 中定义一个自己的资源类型&#xff0c;是一个具…

VMware上不去网

VMwarw上不去网了&#xff0c;之前还好好的&#xff0c;这又是碰了哪里。ifconfig提示no device. 又开始折腾&#xff0c;一顿猛如虎的操作。 先把网络各种禁用&#xff0c;再开启。未解决。 最后的解决了的方案&#xff0c;重新设置了虚拟机的网络。 网络1设置为桥接 网络…

AIGC创作系统ChatGPT网站源码,Midjourney绘画,GPT联网提问/即将支持TSS语音对话功能

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

数据库的索引

索引的特点 1&#xff09;加快查询的速度 2&#xff09;索引自身是一种数据结构&#xff0c;也要占用存储空间 3&#xff09;当我们需要进行增删改的时候&#xff0c;也要对索引进行更新&#xff08;也需要额外的空间开销&#xff09; sql操作 查看索引 show index from …

node后端接口无法插入数据为emoji的表情的问题

原因 emoji的表情一般是这样的\xF0\x9F\x98\x80或者是\xF0\x9F\x98 &#xff0c;事实上 一般数据库的utf8的编码类型都是能保存\xF0\x9F\x98 但是不能保存\xF0\x9F\x98\x80这种样的emoji&#xff0c;要将数据库编码格式为utf8mb4 也就是utf8的超集 另外&#xff0c;除了 数据库…

Java核心知识点整理大全27-笔记(已完结)

目录 30. 云计算 30.1.1. SaaS 30.1.2. PaaS 30.1.3. IaaS 30.1.4. Docker 30.1.4.1. 概念 30.1.4.2. Namespaces 30.1.4.3. 进程(CLONE_NEWPID 实现的进程隔离) 30.1.4.4. Libnetwork 与网络隔离 30.1.4.5. 资源隔离与 CGroups 30.1.4.6. 镜像与 UnionFS 30.1.4.7.…

vue+electron问题汇总

1. Vue_Bug Failed to fetch extension, trying 4 more times 描述&#xff1a;项目启动时报错 解决&#xff1a;注释图片中内容 2. Module not found: Error: Can’t resolve ‘fs’ in 描述&#xff1a;项目启动报错 解决&#xff1a;vue.config.js中添加图中数据 3.导入…

学习php中使用composer下载安装firebase/php-jwt 以及调用方法

学习php中使用composer下载安装firebase/php-jwt 以及调用方法 1、安装firebase/php-jwt2、封装jwt类 1、安装firebase/php-jwt composer require firebase/php-jwt安装好以后出现以下文件: 2、封装jwt类 根据所使用的php框架&#xff0c;在指定目录创建 Token.php <?ph…

好莱坞明星识别

一、前期工作 1. 设置GPU from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as plt import tensorflow as tfgpus tf.config.list_physical_devices("GPU")if gpus:gpu0 …

clickhouse的向量化执行

背景 clickhouse快的很大一部分原因来源于数据的向量化执行&#xff0c;本文就来看一下向量化执行和正常标量执行的区别 SIMD的向量化执行 从上图可知&#xff0c;clickhouse通过SIMD指令可以做到一个cpu周期操作两个向量的运算操作&#xff0c;比起普通的cpu指令效率提高了N…