#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self post];
} -(void)get
{
//1.确定URL
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"]; //2.创建请求对象
NSURLRequest *request =[NSURLRequest requestWithURL:url]; //3.创建会话对象
NSURLSession *session = [NSURLSession sharedSession]; //4.创建Task
/*
第一个参数:请求对象
第二个参数:completionHandler 当请求完成之后调用
data:响应体信息
response:响应头信息
error:错误信息当请求失败的时候 error有值
*/
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { //6.解析数据
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}]; //5.执行Task
[dataTask resume];
} -(void)get2
{
//1.确定URL
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"]; //2.创建请求对象
//NSURLRequest *request =[NSURLRequest requestWithURL:url]; //3.创建会话对象
NSURLSession *session = [NSURLSession sharedSession]; //4.创建Task
/*
第一个参数:请求路径
第二个参数:completionHandler 当请求完成之后调用
data:响应体信息
response:响应头信息
error:错误信息当请求失败的时候 error有值
注意:dataTaskWithURL 内部会自动的将请求路径作为参数创建一个请求对象(GET)
*/
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { //6.解析数据
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}]; //5.执行Task
[dataTask resume];
} -(void)post
{
//1.确定URL
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"]; //2.创建请求对象
NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:url]; //2.1 设置请求方法为post
request.HTTPMethod = @"POST"; //2.2 设置请求体
request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding]; //3.创建会话对象
NSURLSession *session = [NSURLSession sharedSession]; //4.创建Task
/*
第一个参数:请求对象
第二个参数:completionHandler 当请求完成之后调用 !!! 在子线程中调用
data:响应体信息
response:响应头信息
error:错误信息当请求失败的时候 error有值
*/
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSLog(@"%@",[NSThread currentThread]);
//6.解析数据
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}]; //5.执行Task
[dataTask resume];
} @end

#####2 NSURLSession的基本使用

(1)使用步骤

使用NSURLSession创建task,然后执行task

(2)关于task

a.NSURLSessionTask是一个抽象类,本身不能使用,只能使用它的子类

b.NSURLSessionDataTask\NSURLSessionUploadTask\NSURLSessionDownloadTask

(3)发送get请求

```objc

//1.创建NSURLSession对象(可以获取单例对象)

NSURLSession *session = [NSURLSession sharedSession];

//2.根据NSURLSession对象创建一个Task

NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=ss&pwd=ss&type=JSON"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

//方法参数说明

/*

注意:该block是在子线程中调用的,如果拿到数据之后要做一些UI刷新操作,那么需要回到主线程刷新

第一个参数:需要发送的请求对象

block:当请求结束拿到服务器响应的数据时调用block

block-NSData:该请求的响应体

block-NSURLResponse:存放本次请求的响应信息,响应头,真实类型为NSHTTPURLResponse

block-NSErroe:请求错误信息

*/

NSURLSessionDataTask * dataTask =  [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {

//拿到响应头信息

NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

//4.解析拿到的响应数据

NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);

}];

//3.执行Task

//注意:刚创建出来的task默认是挂起状态的,需要调用该方法来启动任务(执行任务)

[dataTask resume];

```

(4)发送get请求的第二种方式

```objc

//注意:该方法内部默认会把URL对象包装成一个NSURLRequest对象(默认是GET请求)

//方法参数说明

/*

//第一个参数:发送请求的URL地址

//block:当请求结束拿到服务器响应的数据时调用block

//block-NSData:该请求的响应体

//block-NSURLResponse:存放本次请求的响应信息,响应头,真实类型为NSHTTPURLResponse

//block-NSErroe:请求错误信息

*/

- (nullable NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error))completionHandler;

```

(5)发送POST请求

```objc

//1.创建NSURLSession对象(可以获取单例对象)

NSURLSession *session = [NSURLSession sharedSession];

//2.根据NSURLSession对象创建一个Task

NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"];

//创建一个请求对象,并这是请求方法为POST,把参数放在请求体中传递

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

request.HTTPMethod = @"POST";

request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {

//拿到响应头信息

NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

//解析拿到的响应数据

NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);

}];

//3.执行Task

//注意:刚创建出来的task默认是挂起状态的,需要调用该方法来启动任务(执行任务)

[dataTask resume];

```

---

iOS开发网络学习七:NSURLSession的基本使用get和post请求的更多相关文章

  1. ios开发网络学习:一:NSURLConnection发送GET,POST请求

    #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...

  2. ios开发网络学习AFN框架的使用一:get和post请求

    #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...

  3. ios开发网络学习十二:NSURLSession实现文件上传

    #import "ViewController.h" // ----WebKitFormBoundaryvMI3CAV0sGUtL8tr #define Kboundary @&q ...

  4. ios开发网络学习十一:NSURLSessionDataTask离线断点下载(断点续传)

    #import "ViewController.h" #define FileName @"121212.mp4" @interface ViewControl ...

  5. ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载

    一:NSURLSessionDownloadTask:实现文件下载:无法监听进度 #import "ViewController.h" @interface ViewControl ...

  6. iOS开发——网络Swift篇&NSURLSession加载数据、下载、上传文件

    NSURLSession加载数据.下载.上传文件   NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍.   1,使用Data Task加载数据 使用全局的 ...

  7. ios开发网络学习AFN三:AFN的序列化

    #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...

  8. ios开发网络学习十:利用文件句柄实现大文件下载

    #import "ViewController.h" @interface ViewController ()<NSURLSessionDataDelegate> @p ...

  9. ios开发网络学习六:设置队列请求与RunLoop

    #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...

随机推荐

  1. RGB 颜色空间转 HSI 颜色空间的matlab程序实现

    RGB 颜色空间转 HSI 颜色空间的matlab程序实现 2014.10.20之前的内容有误,这里依据wikipedia更新了算法内容. 算法以wiki为准 https://en.wikipedia ...

  2. Hibernate中编程式事物的简单使用

    一,openSessioin方式开启或者关闭事物 Session session = null; try { session = HibernateUtils.getSession(); sessio ...

  3. IAR FOR STM8 学习笔记 IAR工程的建立

    STM8是ST意法半导体针对工业应用和消费电子开发而推出的8位单片机. 每种MCU都有自身的优点与缺点,与其它8-bit MCU相比,STM8 8-bit MCU最大的特点是: · 内核: o 最高f ...

  4. AJAX - 封装的传参改为传入对象 XML JSON 数据格式

    Ajax封装函数,上次是直接传参,这次在原来的基础上改进,模仿jQuery 直接传入对象,把之前的参数都变为这个对象的属性. 这样可以随意调换传入数据的次序. 其他优点? 需要再复习一下. Ajax处 ...

  5. 【Java学习】Font字体类的用法介绍

    一.Font类简介 Font类是用于设置图形用户界面上的字体样式的,包括字体类型(例如宋体.仿宋.Times New Roman等).字体风格(例如斜体字.加粗等).以及字号大小. 二.Font类的引 ...

  6. numpy_basic3

    矩陣 矩阵是numpy.matrix类类型的对象,该类继承自numpy.ndarray,任何针对多维数组的操作,对矩阵同样有效,但是作为子类矩阵又结合其自身的特点,做了必要的扩充,比如:乘法计算.求逆 ...

  7. 三、Docker镜像的相关操作

    原文:三.Docker镜像的相关操作 一.查看本地镜像: docker images 二.使用某个镜像来运行容器: docker run -t -i xxxx(镜像名):xx.xx(版本,不带即最新) ...

  8. 失去偏执的苹果会如何?Android 会一统天下吗?

    第 一次听到Apple你绝对不会想到和手机相关.但就是这样一个不相关的东西,彻彻底底的改变了我们这个世界.说起苹果那就得必须说到乔帮主,由于苹果仅仅属于Steve jobs. 乔布斯天生聪颖.初二測得 ...

  9. Eclipse使用方法和技巧二十七:定义自己的高速联想词

    某天在调试代码的时候.尽管是android的project还是习惯的输入syso.然后在ALT+/一下. 旁边的同事就问了一下,这个log打印输出的tag是什么. 接着又问了为什么syso可以智能联想 ...

  10. zookeeper 配置文件说明(zoo.cfg)

    clientPort      # 客户端连接server的port,即对外服务port,一般设置为2181. dataDir        # 存储快照文件snapshot的文件夹. 默认情况下.事 ...