1. 程式人生 > >iOS開發:NSUrlSession網路請求的封裝

iOS開發:NSUrlSession網路請求的封裝

網路請求AFNetworking使用量不用過多的說了,但是在開發過程中,需要用到自己去封裝一個網路請求,此處主要是說一下NSUrlSession的用法;

首先建立一個繼承與NSObject的.h和.m的類,.h中的程式碼如下:

#import <Foundation/Foundation.h>

typedef void (^CompletioBlock)(NSDictionary *dic, NSURLResponse *response, NSError *error);
typedef void (^SuccessBlock)(NSDictionary *data);
typedef void
(^FailureBlock)(NSError *error); @interface SYNetworkHelper : NSObject /** * get請求 */ + (void)getWithUrlString:(NSString *)url parameters:(id)parameters success:(SuccessBlock)successBlock failure:(FailureBlock)failureBlock; /** * post請求 */ + (void)postWithUrlString:(NSString *)url parameters:(id)parameters success:(SuccessBlock)successBlock failure:(FailureBlock)failureBlock; @end

.m中的實現如下:

#import "SYNetworkHelper.h"

@implementation SYNetworkHelper

+ (void)getWithUrlString:(NSString *)url parameters:(id)parameters success:(SuccessBlock)successBlock failure:(FailureBlock)failureBlock
{
    NSMutableString *mutableUrl = [[NSMutableString alloc] initWithString:url];
    if
([parameters allKeys]) { [mutableUrl appendString:@"?"]; for (id key in parameters) { NSString *value = [[parameters objectForKey:key] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; [mutableUrl appendString:[NSString stringWithFormat:@"%@=%@&", key, value]]; } } NSString *urlEnCode = [[mutableUrl substringToIndex:mutableUrl.length - 1] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:urlEnCode]]; NSURLSession *urlSession = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [urlSession dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (error) { failureBlock(error); } else { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; successBlock(dic); } }]; [dataTask resume]; } + (void)postWithUrlString:(NSString *)url parameters:(id)parameters success:(SuccessBlock)successBlock failure:(FailureBlock)failureBlock { NSURL *nsurl = [NSURL URLWithString:url]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsurl]; //如果想要設定網路超時的時間的話,可以使用下面的方法: //NSMutableURLRequest *mutableRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]; //設定請求型別 request.HTTPMethod = @"POST"; NSString *postStr = [SYNetworkHelper parseParams:parameters]; //把引數放到請求體內 request.HTTPBody = [postStr dataUsingEncoding:NSUTF8StringEncoding]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (error) { //請求失敗 failureBlock(error); } else { //請求成功 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; successBlock(dic); } }]; [dataTask resume]; //開始請求 } //把NSDictionary解析成post格式的NSString字串 + (NSString *)parseParams:(NSDictionary *)params { NSString *keyValueFormat; NSMutableString *result = [NSMutableString new]; NSMutableArray *array = [NSMutableArray new]; //例項化一個key列舉器用來存放dictionary的key NSEnumerator *keyEnum = [params keyEnumerator]; id key; while (key = [keyEnum nextObject]) { keyValueFormat = [NSString stringWithFormat:@"%@=%@&", key, [params valueForKey:key]]; [result appendString:keyValueFormat]; [array addObject:keyValueFormat]; } return result; } @end

相關推薦

iOS開發NSUrlSession網路請求封裝

網路請求AFNetworking使用量不用過多的說了,但是在開發過程中,需要用到自己去封裝一個網路請求,此處主要是說一下NSUrlSession的用法; 首先建立一個繼承與NSObject的.h和.m的類,.h中的程式碼如下: #import &

iOS重構-輕量級的網路請求封裝實踐

前言 在十分鐘搭建主流框架_簡單的網路部分(OC) 中,我們使用AFN框架順利的傳送網路請求並返回了有用資料,但對AFN框架的依賴十分嚴重,下面我們重構一下。 原始碼github地址 初步 很多時候,我們涉及到網路請求這塊,都離不開幾個第三方框架,AFNetw

iOS開發--HTTP的網路請求狀態程式碼詳解

網路請求是iOS專案的一個大部分,而且大部分的iOS的專案的網路請求是根據AFN進行的二次封裝,我們檢視返回的結果或者error的網路錯誤code,從而確認錯誤型別,針對行的進行除錯修改. 說明:一下整理內容來自網路或者書籍,同時也加上了自己的修改和補充,主要

Spring Boot + Vue 前後端分離開發,前端網路請求封裝與配置

前端網路訪問,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,網路訪問較多的採用 vue-resources,Vue2.0 之後,官方不再建議使用 vue-resources ,這個專案本身也停止維護,目前建議使用的方案是 axios。今天鬆哥就帶大家來看看 axios 的使用。 axios

React Native 網路請求封裝使用Promise封裝fetch請求

       React Native中雖然也內建了XMLHttpRequest 網路請求API(也就是俗稱的ajax),但XMLHttpRequest 是一個設計粗糙的 API,不符合職責分離的原則,配置和呼叫方式非常混亂,而且基於事件的非同步模型寫起來也沒有現代的 P

iOS開發對於AFNetworking HTTP轉HTTPS請求證書問題

轉載至:http://www.jianshu.com/p/551fa7482def 公司之前的請求都是HTTP的,現在要把HTTP改成HTTPS,如果我們只是單單的把http改成https,在進行網路請求的時候,會報下面的一大堆錯誤,大概意思也就是說證書無效,影響請求的安

iOS 基於AF網路請求封裝的簡易思路

最近重新看了一下田神基於AF封裝的網路請求功能,略有所心得,想寫一些自己粗淺的心得,沒有那麼多專業術語,方便自己後面檢視封裝的思路! 網路請求,簡單的理解,就是一句話:構建client,然後發出請求,

iOS AFN監聽網路封裝網路請求 —— HERO部落格

對AFN網路請求進行封裝,程式碼如下:/************************* .h檔案 *************************/ #import <Foundation/Foundation.h> @interface HWManage

iOS NSURLSession網路請求(get/post/下載)

NSURLConnection在iOS 9.0以後就廢棄了 DEPRECATED deprecated廢棄的意思 NSURLSession 已經代替了NSURLConnection 功能上差不多.NSURLSession使用起來更方便,支援下載和上傳檔案,

iOS開發系列-NSURLSession

公司 項目 一個 lse 執行 圖片 conn http connect 概述 NSURLSession是從iOS7開始出現的。NSURLSession比NSURLConnection簡單很多並且避免了很多坑,因此目前公司項目大部分由NSURLConnection過度為NS

iOS開發UILabel字號根據屏幕縮放

control after call git 步驟 obj gin begin follow 場景: 假設我們有這樣一個需求,iPhone 6(屏幕寬度為375pt)上的設計圖上的字號為17pt,iPhone 6 Plus上的字號根據屏幕寬度縮放,即字號為(17pt x 4

iOS 開發Method Swizzling

是個 不足 沒有 int from ios 開發 解決方案 它的 nslog iOS 開發之Method Swizzling 前言 如果你還不知道什麽是Method Swizzling,你可以看看NSHipster 的文章 ,我簡單介紹一下,method swizzling

iOS 開發 解決Xcode7.3 不能自動索引標頭檔案,檔名等問題

iOS 開發: 解決Xcode7.3 不能自動索引標頭檔案,檔名,程式碼補全等問題 解決方案: 開啟Xcode –> Target –> BuildSettings –> Apple LLVM 7.1 -Language-Objective C 下面的 Weak

iOS 開發CocoaPods 安裝及問題 ERROR: Error installing cocoapods: activesupport requires Ruby version>=2.2.2

iOS 開發:CocoaPods 安裝以及 ERROR:  Error installing cocoapods: activesupport requires Ruby version >= 2.2.2. 今天用新的Mac筆記本安裝coco

iOS開發UITableview的多選功能實現

一、 先看效果: 最近專案中要運用即時通訊實現群組功能, 在建立群時需要選擇新增多個成員: 二、思路: 第一次點選cell選中, 再次點選取消選中; 三、方法: 只需要設定兩個屬性, 操作兩個方法即可; 1、UITableview 自帶多選功能: //允許多選 _

iOS開發環信整合步驟以及常見錯誤

環信官方文件 一、整合: 下載SDK手動整合或者CocoaPod終端整合: 下載SDK 匯入檔案以及依賴庫: 關閉Bitcode: Build Settings → Linking → Enable Bitcode 中設定 NO。 二、常

iOS開發字典(NSDictionary)和陣列( NSArray)轉換成字串

概述: 在專案開發中,總是與伺服器進行著介面的互動,傳參是不可缺少的一部分。後臺返回的j son資料我們可以很好的解析使用,但是我們如何向後臺傳送j son資料的引數呢?要知道,一般伺服器是不允許傳物件的。以下是在專案中遇到的實際問題,在此總結一下,供大家交流。 一. 字典轉字串:

iOS開發發出系統的聲音!發出自己的聲音!

這個連結非常詳盡地列舉了IOS7裡面所有的系統聲音,聲音的ID,聲音的存放位置 儘管現在已經是ios8的時代,但是系統聲音這個東東不會因此過時,畢竟聲音就那幾十種,不會一下子有太大變化。 https://github.com/TUNER88/iOSSystemSou

iOS開發UILabel字號根據螢幕縮放

場景: 假設我們有這樣一個需求,iPhone 6(螢幕寬度為375pt)上的設計圖上的字號為17pt,iPhone 6 Plus上的字號根據螢幕寬度縮放,即字號為(17pt x 414pt / 375pt)= 18.768pt 解決方案: 如果一個一個設定太麻煩,容易遺漏,這時候我們採用 runtime

iOS開發常用的UIView控制元件——UILabel、UITextField、UIButton

前面幾篇文章已經對iOS開發中比較基本的幾個檔案進行了瞭解,今天主要學習StoryBoard檔案和幾個常見的UI控制元件。 Storyboard功能是在iOS5開始新增的功能,一種新技術的出現大多是為了彌補舊技術的不足,而在storyboard之前iOS 開發設計介面是使用nib檔案(xib