OC HTTPRequest GET和POST请求的代码封装

对于GET和PSOT请求我们在开发中会经常使用,所以对代码进行封装就可以做到事半功倍.下面就介绍下怎么对代码进行封装,

要求是:

1.要有网络成功和失败的blcok.

2.如果服务器传回的是 JSON 数据,自动解析;如果不是,直接返回二进制数据.

3.默认成功之后的block回调在主线程进行.

首先我们要创建一个类ZSNetworkTool,继承自NSObject,代码如下

#import <Foundation/Foundation.h>

//定义别名

//成功回调类型:参数: 1. id: object(如果是 JSON ,那么直接解析成OC中的数组或者字典.如果不是JSON ,直接返回 NSData)

typedef void(^SuccessBlock)(id object , NSURLResponse *response);

// 失败回调类型:参数: NSError error;

typedef void(^failBlock)(NSError *error);

@interface ZSNetworkTool : NSObject

// 单例的实例化方法

+ (instancetype)sharedNewtWorkTool;

// GET请求调用的方法 其中: urlString:网络接口. paramaters:参数字典 参数字典:  key:服务器接收参数的 key 值.  value:参数内容. 成功回调类型:参数: 1. id: object(如果是 JSON ,那么直接解析成OC中的数组或者字典.如果不是JSON ,直接返回 NSData) 2. NSURLResponse: response ,  success: 成功回调. fail 失败回调.

- (void)GETRequestWithUrl:(NSString *)urlString paramaters:(NSMutableDictionary *)paramaters successBlock:(SuccessBlock)success FailBlock:(failBlock)fail;

// POST请求调用方法 其中: urlString:网络接口. paramaters:参数字典 参数字典:  key:服务器接收参数的 key 值.  value:参数内容. 成功回调类型:参数: 1. id: object(如果是 JSON ,那么直接解析成OC中的数组或者字典.如果不是JSON ,直接返回 NSData) 2. NSURLResponse: response ,  success: 成功回调. fail 失败回调.

-(void)POSTRequestWithUrl:(NSString *)urlString paramaters:(NSMutableDictionary *)paramaters successBlock:(SuccessBlock)success FailBlock:(failBlock)fail;

@end

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

在.m实现方法

#import "ZSNetworkTool.h"

@implementation ZSNetworkTool

// 单例的实例化方法

+(instancetype)sharedNewtWorkTool

{

static id _instance;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

_instance = [[self alloc] init];

});

return _instance;

}

//实现GET请求方法

- (void)GETRequestWithUrl:(NSString *)urlString paramaters:(NSMutableDictionary *)paramaters successBlock:(SuccessBlock)success FailBlock:(failBlock)fail

{

NSMutableString *strM = [[NSMutableString alloc] init];

//遍历参数字典将value和key拼装在一起

[paramaters enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {

// 服务器接收参数的 key 值.

NSString *paramaterKey = key;

// 参数内容

NSString *paramaterValue = obj;

// appendFormat :可变字符串直接拼接的方法!

[strM appendFormat:@"%@=%@&",paramaterKey,paramaterValue];

}];

urlString = [NSString stringWithFormat:@"%@?%@",urlString,strM];

// 截取字符串的方法!

urlString = [urlString substringToIndex:urlString.length - 1];

NSLog(@"urlString:%@",urlString);

NSURL *url = [NSURL URLWithString:urlString];

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15];

// 2. 发送网络请求.

// completionHandler: 说明网络请求完成!

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

// 网络请求成功:

if (data && !error) {

// 查看 data 是否是 JSON 数据.

// JSON 解析.

id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];

// 如果 obj 能够解析,说明就是 JSON

if (!obj) {

obj = data;

}

// 成功回调

dispatch_async(dispatch_get_main_queue(), ^{

if (success) {

success(obj,response);

}

});

}else //失败

{

// 失败回调

if (fail) {

fail(error);

}

}

}] resume];

}

//POST请求方法

- (void)POSTRequestWithUrl:(NSString *)urlString paramaters:(NSMutableDictionary *)paramaters successBlock:(SuccessBlock)success FailBlock:(failBlock)fail

{

NSMutableString *strM = [[NSMutableString alloc] init];

[paramaters enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {

// 服务器接收参数的 key 值.

NSString *paramaterKey = key;

// 参数内容

NSString *paramaterValue = obj;

// appendFormat :可变字符串直接拼接的方法!

[strM appendFormat:@"%@=%@&",paramaterKey,paramaterValue];

}];

NSString *body = [strM substringToIndex:strM.length - 1];

NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15];

// 1.设置请求方法:

request.HTTPMethod = @"POST";

// 2.设置请求体

request.HTTPBody = bodyData;

// 2. 发送网络请求.

// completionHandler: 说明网络请求完成!

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

// 网络请求成功:

if (data && !error) {

// 查看 data 是否是 JSON 数据.

// JSON 解析.

id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];

// 如果 obj 能够解析,说明就是 JSON

if (!obj) {

obj = data;

}

// 成功回调

dispatch_async(dispatch_get_main_queue(), ^{

if (success) {

success(obj,response);

}

});

}else //失败

{

// 失败回调

if (fail) {

fail(error);

}

}

}] resume];

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

下面的代码是控制器中调用一下GET方法

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

NSLog(@"touchesBegan");

NSMutableDictionary *dict = @{@"username":@"value1",@"password":@"value2"}.mutableCopy;

[[CZNetworkTool sharedNewtWorkTool] GETRequestWithUrl:@"http://127.0.0.1/login/login.php" paramaters:dict successBlock:^(id object, NSURLResponse *response) {

NSLog(@"网络请求成功:%@ %@",object,[NSThread currentThread]);

} FailBlock:^(NSError *error) {

NSLog(@"网络请求失败");

}];

}

@end

时间: 2024-10-13 22:26:19

OC HTTPRequest GET和POST请求的代码封装的相关文章

httpClient Post例子,Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete

httpclient post方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //----1. HttpPost request = new HttpPost(url); // 先封装一个 JSON 对象 JSONObject param = new JSONObject(); param.put("name", "rarnu"); param.put("password", "123456"

HttpUrlconnection 、Httpclient get 、post 请求核心代码

HttpURLConnection的使用 /* * URL请求的类别分为二类,GET与POST请求.二者的区别在于: * a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, * b:) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内. */ // url对象表示的是一个指定的资源 URL url = new URL("http://localhost:8080/TestHttpURLConnectionPr

ajax同步请求JS代码

ajax同步请求JS代码 <script type="text/javascript"> var txt = document.getElementById('txt'); //1.创建XMLHttpRequest对象 var xhr = null; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }else { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } /

Android实际开发之网络请求组件的封装(OkHttp为核心)

趁周末时间撸了两天代码,将OkHttp网络请求框架进行了一次简单封装,对于实际开发非常有用.. 此次封装主要针对我们经常使用的网络请求的步骤进行封装,在已有框架OkHttp的基础上进行实际开发的封装 发送一个网络请求,有以下三个功能模块: 一:request处理 二:OkHttp核心处理 三:callback处理 我们进行网络请求组件的封装也是根据这三大模块进行封装的,下面规划一下这次封装的一个思维导图: 根据以上思维导图,我们第一步,先进行request的封装: 以下是封装的一个CommonR

使用getParameterMap()方法实现对请求参数的封装的工具类

我们知道,HttpServletRequest这个类的getParameter(name),getParameterValues(name)可以分别实现对页面传来的单个参数和对多个同名参数的接受.特别是getParameter(name)这个方法被用的次数特别多.有时候页面传来多个参数的情况下,要写多个request.getParameter(name)进行逐个接受,当然在springmvc框架下你可以在选择使用对象接受参数,也可以在方法上对参数进行逐个接收.但这样做的弊端在于在请求参数个数和名

OC学习篇之---类的三大特性(封装,继承,多态)

之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 学习过Java中类的同学可能都知道了,封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java

js 实现对ajax请求面向对象的封装

AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 在js中使用ajax请求一般包含三个步骤: 1.创建XMLHttp对象 2.发送请求:包括打开链接.发送请求 3.处理响应 在不使用任何的js框架的情况下,要想使用ajax,可能需要向下面一样进行代码的编写 var xmlHttp = xmlHttpCreate();//创建对象 xmlHttp.onreadysta

Struts2请求数据自动封装和数据类型转换

方式1:jsp表单数据填充到action中的属性: 方式2:jsp表单数据填充到action的对象的属性: 方式1: 第一步:引包,省去 第二步:配置struts2的过滤器 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmln

对系统网络请求进行简单封装

AGConnectionNet对系统网络请求进行简单封装,可便利的进行网络请求,并将数据解析与网络请求封装在同一方法下,使用更加便利(JSON 解析采用自身解析方法, XML 解析采用第三方 ReadXML 进行解析). 方法具体参数说明 初始化方法:/*** 类方法,实例化当前数据请求对象 (单例)** @return 当前请求对象*/+ (instancetype)shareRequestData; 仅进行请求数据方法/*** 请求数据 (session 请求)** @param URLSt