GET和POST

HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。

GET和POST区别

最主要的区别是GET是从API里面取数据,POST是向API里发数据。
GET使用URL或Cookie传参。而POST将数据放在BODY中。
GET的URL会有长度上的限制,则POST的数据则可以非常大。
POST比GET安全,因为数据在地址栏上不可见。
对于GET只需要跑一趟就可以把数据传输到位,而POST则需要先去进行一个请求的过程,然后在把数据安排到位!
GET 安全性非常低,POST安全性较高。但是执行效率却比POST方法好。

GET

GET请求步骤

确定请求路径URL(也就是后台提供的接口)。
创建请求对象NSURLRequest(如不加设置请求方法和请求头,则使用默认请求头和GET请求方法)。
创建会话对象NSURLSession
创建请求任务NSURLSessionDataTask(根据需求选择合适的任务类型)。
执行任务
解析请求返回的数据

    //请求 URLNSString* urlStr = [NSString stringWithFormat:@"https://news-at.zhihu.com/api/4/version/ios/2.3.0"];//封装成 NSURLNSURL *url = [NSURL URLWithString:urlStr];//初始化 请求对象NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];//也可以这样初始化对象//NSURLRequest* request = [NSURLRequest requestWithURL:url];//或者写为如下形式//NSMutableURLRequest *requestSecond = [NSMutableURLRequest initWithURL:url];//[requestSecond setHTTPMethod:@"GET"];//发送请求  默认为 GET 请求//1 、获得会话对象NSURLSession *session = [NSURLSession sharedSession];// 2、创建请求任务//        第一个参数:请求对象//      第二个参数:completionHandler回调(请求完成【成功|失败】的回调)//      data:响应体信息(期望的数据)//      response:响应头信息,主要是对服务器端的描述//      error:错误信息,如果请求失败,则error有值NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if(!error){NSLog(@"请求加载成功。。。");//说明:(此处返回的数据是JSON格式的,因此使用NSJSONSerialization进行反序列化处理)NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];} else {NSLog(@"网络请求失败!");}}];//执行任务[dataTask resume];

POST

POST请求步骤

确定请求路径URL(也就是后台提供的接口)。
创建请求对象NSMutableURLRequest,设置请求方式为post。
设置请求体,根据后台所要求的数据格式以及类型(json、xml等等)设置。
若有些后台接口有请求头,则还应该设置请求头。
创建会话对象NSURLSession
创建请求任务NSURLSessionDataTask(根据需求选择合适的任务类型)。
执行任务
解析请求返回的数据

    //1.创建URL对象NSURL *url = [NSURL URLWithString:@"你要获取的地址"];//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:@"username = %@ & pwd = %@", self.username.text, self.pwd.text];//把拼接后的字符串转换为data,设置请求体(这个data就是请求体)request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];//6.建立会话 session支持三种类型的任务//    NSURLSessionDataTask  //加载数据//    NSURLSessionDownloadTask  //下载//    NSURLSessionUploadTask   //上传NSURLSession *session = [NSURLSession sharedSession];//7.创建请求任务NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {//data就是你获取到的数据,你可以自行对其进行解析//error就是获取失败时出现的问题}];//8.启动任务[dataTask resume];

AFNetworking

简介

AFNetworking作为第三方库添加方式和之前博客中提到的Masonry,JSONModel等相似。

AFNetworking是一个功能非常强大的框架,主要是用于网络请求,把复杂的原生代码封装好,我们只需要简单的几步就可以完成网络请求。

添加头文件
#import "AFNetworking.h"//主要用于网络请求方法 #import "UIKit+AFNetworking.h"//里面有异步加载图片的方法
GET
GET方法

         第一个参数:NSString类型的请求路径,AFNetworking内部会自动将该路径包装为                                                    一个url并创建请求对象第二个参数:请求参数,此处为nil第三个参数:进度回调,此处为nil第四个参数:请求成功之后回调Block第五个参数:请求失败回调Block
    [manager GET:@"https://news-at.zhihu.com/api/4/news/before/20221023" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"GET 请求成功, %@", responseObject[@"date"]);self.AFNetWorkTestGETDictionary = responseObject;} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"GET 失败");}];

POST

post方法

[manager POST:(nonnull NSString *) parameters:(nullable id) progress:^(NSProgress * _Nonnull uploadProgress) {;} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {;} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {;}]
第二个参数:请求参数,以字典的方式传递,AFN内部会判断当前是POST请求还是GET请求,以选择直接拼接还是转换为NSData放到请求体中传递
第三个参数:进度回调 此处为nil
第四个参数:请求成功之后回调Block
第五个参数:请求失败回调Block

 [manager POST:(nonnull NSString *) parameters:(nullable id) constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {;} progress:^(NSProgress * _Nonnull uploadProgress) {;} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {;} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {;}]

对参数的理解
第一个参数:请求路径(NSString类型)
第二个参数:非文件参数,以字典的方式传递
第三个参数:constructingBodyWithBlock 在该回调中拼接文件参数
第四个参数:progress 进度回调
uploadProgress.completedUnitCount:已经上传的数据大小
uploadProgress.totalUnitCount:数据的总大小
第五个参数:success 请求成功的回调
task:上传Task
responseObject:服务器返回的响应体信息
第六个参数:failure 请求失败的回调
task:上传Task
error:错误信息

第一种

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//创建参数[self.AFNetWorkTestPOSTDictionary setObject:@"Viper" forKey:@"userName"];[self.AFNetWorkTestPOSTDictionary setObject:@"Viper333" forKey:@"passWord"];//发送POST请求[manager POST:@"要上传的URL" parameters:self.AFNetWorkTestPOSTDictionary progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {//responseObject是请求成功返回的相应结果,在AFN内部已经把相应结果转换为OC对象,通常是字典或者数组                } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"POST Failed");}];

第二种

 //创建会话管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//处理非文件的参数,模拟上传账号密码self.AFNetWorkTestPOSTDictionary = [[NSMutableDictionary alloc] init];[self.AFNetWorkTestPOSTDictionary setObject:@"Viper" forKey:@"userName"];[self.AFNetWorkTestPOSTDictionary setObject:@"Viper333" forKey:@"passWord"];//发送POST请求上传文件[manager POST:@"https://news-at.zhihu.com/api/4/news/before/20221023" parameters:self.AFNetWorkTestPOSTDictionary  constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {// 混合的数据为头像// 获取头像// 把头像转化为DataUIImage *image = [UIImage imageNamed:@"1.png"];NSData *imageData = UIImagePNGRepresentation(image);//在BLOCK进行参数拼接//ImageUp.png是上传到服务器知乎以什么方式保存// 什么是MIME Type : 参考博客:https://www.cnblogs.com/jsean/articles/1610265.html        [formData appendPartWithFileData:imageData name:@"file" fileName:@"1.png" mimeType:@"image/png"];//[formData appendPartWithFileURL:fileUrl name:@"file"fileName:@"Image7.png" mimeType:@"image/png" error:nil];//[formData appendPartWithFileURL:fileUrl name:@"file" error:nil];} progress:^(NSProgress * _Nonnull uploadProgress) {//        progress 进度回调;//uploadProgress.completedUnitCount:已经上传的数据大小//uploadProgress.totalUnitCount:数据的总大小NSLog(@"%f", 1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"POST UP Succeed!");} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"POST UP Failed");}];

在其中用到了将图片转化为NSData类型并拼接上去,关于转化的方法:

 UIImage *image = [UIImage imageNamed:@"IMAGE.png"];NSData *imageData = UIImagePNGRepresentation(image);

拼接数据的方法

  第一个参数:要上传的文件二进制数据第二个参数:文件参数对应的参数名称,此处为file是该台服务器规定的第三个参数:该文件上传到服务后以什么名称保存第四个参数:该文件的MIMeType类型
[formData appendPartWithFileData:data name:@"file" fileName:@"Image.png" mimeType:@"application/octet-stream"];第一个参数:要上传的文件的URL路径第二个参数:文件参数对应的参数名称,此处为file是该台服务器规定的第三个参数:该文件上传到服务后以什么名称保存第四个参数:该文件的MIMeType类型第五个参数:错误信息,传地址
[formData appendPartWithFileURL:fileUrl name:@"file" fileName:@"Image.png" mimeType:@"application/octet-stream" error:nil];第一个参数:要上传的文件的URL路径第二个参数:文件参数对应的参数名称,此处为file第三个参数:错误信息
[formData appendPartWithFileURL:fileUrl name:@"file" error:nil];

iOS - postgetAFNetworking相关推荐

  1. Xcode couldn‘t find any iOS App Development provisioning profiles matching ‘com.example.***‘

    在更新完iOS14.3后,Xcode真机调试时报错,无法进行真机测试: 报以下错误: No profiles for 'com.example.software.Login' were found: ...

  2. iOS视频硬编码技术

    iOS视频硬编码技术 一.iOS视频采集硬编码 基本原理 硬编码 & 软编码 硬编码:通过系统自带的Camera录制视频,实际上调用的是底层的高清编码硬件模块,即显卡,不使用CPU,速度快 软 ...

  3. iphone smtp服务器没有响应,电子邮件卡在iPhone或iPad上的发件箱?如何修复iOS中的未发送邮件 | MOS86...

    您曾经在iOS中发送电子邮件,只能将信息卡在iPhone,iPad或iPod touch的邮件应用发件箱中?你知道这是什么时候发生的,因为在iOS的Mail应用程序的底部,状态栏在iOS中显示1个未发 ...

  4. layer弹窗在IOS上,被软键盘挤到上边的解决方法

    就像这种情况,经过多番请教跟尝试,找到一个能解决这个问题的方法,但可能有点笨重.就是在当前弹框里,设置offset的值,里边的值可以随意写,然后再下边给弹框追加一个样式即可. <!DOCTYPE ...

  5. iOS开发8:使用Tool Bar切换视图

    之前讨论的都是单视图应用程序,而在实际应用中,我们可能要多个视图,并根据用户的需要切换视图. iOS中几种典型的多视图程序: (1)Tab Bar Application:程序的底部有一排按钮,轻触其 ...

  6. 25个增强iOS应用程序性能的提示和技巧 — 中级篇

    本文由破船译自:raywenderlich 转载请注明出处:BeyondVincent的博客 _____________ 在开发iOS应用程序时.让程序具有良好的性能是非常关键的.这也是用户所期望的. ...

  7. iOS Webview打开不受信的URL

    在我们开发过程中经常会碰到直接访问开发人员的私有地址, 这样在app 上是无法打开指定的网页的. 在iOS中需要对WKWebView 进行如下设置: 1.在工程的Plist 文件中添加一下选项 App ...

  8. iOS蓝牙开发---CoreBluetooth[BLE 4.0] 初级篇[内附Demo地址]

    一.蓝牙基础知识 (一)常见简称 1.MFI  make for ipad ,iphone, itouch 专们为苹果设备制作的设备,开发使用ExternalAccessory 框架(认证流程貌似挺复 ...

  9. iOS 开发经验总结

    iOS 开发经验总结http://www.cocoachina.com/ios/20170216/18699.html 1.cocoa pods 常用的framework 1 2 3 4 5 6 7 ...

最新文章

  1. 爬虫之JS的解析确定js的位置
  2. python网络编程及高并发问题
  3. idea提交git差件_多人合作使用git,推送代码、和并分支
  4. 【Matlab 控制】利用 XY Graph 画图
  5. MySQL 高级 - 输入参数
  6. JavaWeb中的Session、SessionListener、在线人数统计
  7. 【Android OpenGL ES 开发 (四)】纹理相关(一)
  8. 《机器人学经典教程》——2.2 控制论
  9. 云原生时代,阿里云联手博睿数据让IT运维可观测更智能
  10. 音视频实时交互/语音通话/即时通话/连麦,EasyRTC即时通讯系统全方位服务
  11. 抽象代数之可解群的子群是可解群以S4为例
  12. DSP程序死机(跑飞)的一些情况-软件原因
  13. Java中引用数据类型有哪些,它们与基本数据类型有什么区别?
  14. 8款免费的Windows数字签名软件【附下载】
  15. 技术领导者 第44讲|空降技术高管的“择业七计”
  16. 集成百度街景报错Error inflating class com.baidu.lbsapi.panoramaview.PanoramaView
  17. 励志照亮人生 编程改变命运
  18. YoMail 隐藏小功能之怎样在yomail里使用石墨文档?
  19. 让我差点中计的电话诈骗套路!|凹凸日常
  20. 基于Matlab 实现螺旋线 轨迹曲线绘制

热门文章

  1. hutool工具 导出excel
  2. HTML之typed.js
  3. Win7添加Lookback接口
  4. 人工客服or智能客服:人机协同,效果1+1大于2
  5. 洛谷P1536村村通(并查集模板题)
  6. Android各版本发布时间
  7. 存储RAID——RAID级别
  8. 保持联系:微型连接器,可以把压力-凯利讯半导体
  9. python学习笔记(十四) 邮件与短信收发
  10. OAM EFM原理总结