iOS网络编程之四——请求类NSURLRequest使用详解 一、引言 在前面几篇博客中,介绍了iOS开发中的网络编程相关内容并且介绍了常用了两个平行的网络框架NSURLSession 无论是NSURLSession类还是NSURLConnection类,其网络请求都是通过NSURLRequest类进行发起的,本篇博客将介绍NSURLRequest类的用法和其中请求属性的设置。 二、NSURLRequest类中常用方法和属性总结 //通过类方法创建默认的请求对象 /* 通过这种方式创建的请求对象 默认使用NSURLRequestUseProtocolCachePolicy缓存逻辑 NS_AVAILABLE(10_7, 4_0); //设置是否允许使用服务商蜂窝网 @property BOOL allowsCellularAccess NS_AVAILABLE(10_8, 6_0); 四、NSURLRequest 请求对象与HTTP/HTTPS协议相关请求的属性设置 一下属性的设置必须使用NSMutableURLRequest类,如果是NSURLRequest,则只可以读,不可以修改。
. */ - (void)setImageForState:(UIControlState)state withURLRequest:(NSURLRequest *)urlRequest * _Nullable response, UIImage *image))success failure:(nullable void (^)(NSURLRequest UIImage *)placeholderImage; - (void)setImageForState:(UIControlState)state withURLRequest:(NSURLRequest * _Nullable response, UIImage *image))success failure:(nullable void (^)(NSURLRequest * _Nullable response, UIImage *image))success failure:(nullable void (^)(NSURLRequest
iOS网络编程之六——数据缓存类NSURLCache使用解析 一、引言 在前面博客中,介绍了NSURLRequest请求类的相关使用方法,其中有介绍关于请求返回数据的缓存策略,实际上, NSURLRequest类介绍的博客地址如下: iOS中NSURLRequest相关使用:http://my.oschina.net/u/2340880/blog/620225。 :(nullable NSString *)path; //获取某一请求的缓存 - (nullable NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest request; //给请求设置指定的缓存 - (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request; //移除某个请求的缓存 - (void)removeCachedResponseForRequest:(NSURLRequest *)request; //移除所有缓存数据 -
. */ - (void)setImageForState:(UIControlState)state withURLRequest:(NSURLRequest *)urlRequest * _Nullable response, UIImage *image))success failure:(nullable void (^)(NSURLRequest UIImage *)placeholderImage; - (void)setImageForState:(UIControlState)state withURLRequest:(NSURLRequest * _Nullable response, UIImage *image))success failure:(nullable void (^)(NSURLRequest * _Nullable response, UIImage *image))success failure:(nullable void (^)(NSURLRequest
(1)NSURLSessionDataTask 通过request对象或url创建: -(NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest NSURLSessionUploadTask 通过request创建,在上传时指定文件源或数据源: -(NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)requestfromFile:(NSURL *)fileURL; -(NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest * )requestfromData:(NSData *)bodyData; -(NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request; 通过completionHandler指定任务完成后的回调代码块: -(NSURLSessionUploadTask*)uploadTaskWithRequest:(NSURLRequest
pathString = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"h5"]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:pathString]]; [self.webView loadRequest fileURLWithPath:pathString]; NSURL *loadUrl = [NSURL URLWithString:pathString2 relativeToURL:baseUrl]; NSURLRequest *request = [NSURLRequest requestWithURL:loadUrl]; [self.webView loadRequest:request]; } 加载uni-app *request = [NSURLRequest requestWithURL:loadUrl]; [self.webView loadRequest:request]; } 三、加载沙盒内
success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *responseObject ))success failure:(nullable void (^)(NSURLRequest ))success failure:(nullable void (^)(NSURLRequest success:(void (^)(NSURLRequest * _Nonnull, NSHTTPURLResponse * _Nullable, UIImage * _Nonnull))success - (nullable UIImage *)imageforRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString
. */ - (void)setImageWithURLRequest:(NSURLRequest *)urlRequest placeholderImage:(nullable UIImage *)placeholderImage success:(nullable void (^)(NSURLRequest *request, *)url placeholderImage:(nullable UIImage *)placeholderImage; - (void)setImageWithURLRequest:(NSURLRequest request placeholderImage:placeholderImage success:nil failure:nil]; } - (void)setImageWithURLRequest:(NSURLRequest placeholderImage:(UIImage *)placeholderImage success:(void (^)(NSURLRequest
拦截重定向获取里面的cookie AFHTTPRequestOperation *requestOperation=[[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@""]]]; [requestOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) { if
步骤: 1.创建NSURL NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"]; 2.通过URL创建NSURLRequest NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy 1.创建NSURL NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"]; 2.通过URL创建NSURLRequest NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy
; } 1.3 第三层 AFNetworking/AFURLSessionManager.m 方法 - (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest 源码 - (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request 没有问题则根据success是否有回调将图片发送出去;若失败,也检查UUID是否相等,并根据有无failure回调,将错误信息输出 代码: - (void)setImageWithURLRequest:(NSURLRequest placeholderImage:(UIImage *)placeholderImage success:(void (^)(NSURLRequest AFAutoPurgingImageCache.m 类名: AFAutoPurgingImageCache.m 代码: - (nullable UIImage *)imageforRequest:(NSURLRequest
使用如下方法进行NSURLConnection的同步请求: NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; NSData * data = [NSURLConnection sendSynchronousRequest * request = [NSURLRequest requestWithURL:url]; //其中的queue参数决定block中的代码在哪个队列中执行 [NSURLConnection = [[NSMutableData alloc]init]; NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; [NSURLConnection connectionWithRequest:request delegate
NSURL url = [[NSBundle mainBundle]URLForResource:@"login" withExtension:@"html"]; // NSURLRequest request = [NSURLRequest requestWithURL:url]; // [webView loadRequest:request]; //《2》加载html( hell" ofType:@"pdf"]; //获取mimetype NSURL * url = [NSURL fileURLWithPath:path];//不要使用urlWithString方法 NSURLRequest * request = [NSURLRequest requestWithURL:url]; NSURLResponse * rest = nil; [NSURLConnection sendSynchronousRequest NSLog(@"didFailLoadWithError"); } (BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest
task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler 首先看一下系统的API接口 /* An HTTP request *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler { NSURLRequest *redirectRequest
等代理抓包方式全部失效)CustomHTTPProtocol 决定请求是否需要当前协议对象处理的方法 /** 决定请求是否需要当前协议对象处理 */ +(BOOL)canInitWithRequest:(NSURLRequest NSString * url = request.URL.absoluteString; return [self isUrl:url]; } 对当前的请求对象需要进行哪些处理 + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request; 修改NSURLRequest 对象:在CanonicalRequestForRequest - (instancetype)initWithRequest:(NSURLRequest *)request cachedResponse:(nullable NSCachedURLResponse
. + (void)sendAsynchronousRequest:(NSURLRequest*) request queue:(NSOperationQueue [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:url] delegate:self]; } 代理实现方法示例 # username=520it&pwd=520it&type=JSON"]; //2.创建请求对象 //请求对象内部默认已经包含了请求头和请求方法(GET) NSURLRequest *request = [NSURLRequest requestWithURL:URL]; // 3.创建下载任务 /** * 第一个参数 - request:请求对象 The request may have a body stream. */ - (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)
其加载数据的方式有三种: 第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的 *request =[NSURLRequest requestWithURL:url]; // 4.加载网页 [webView loadRequest:request]; // 例如: //加载网络请求 - (void)loadRequest:(NSURLRequest *)request; /* 功能:加载本地HTML字符串 string为要加载的本地HTML *request =[NSURLRequest requestWithURL:url]; // 4.加载网页 [webView loadRequest:request]; // 加载方法 /*加载请求*/ - (WKNavigation *)loadRequest:(NSURLRequest *)request; /*加载本地HTML字符串*/ - (WKNavigation
定义一个NSURLProtocol的子类 在继承NSURLProtocol中,我们需要实现 + (BOOL)canInitWithRequest:(NSURLRequest *)request, 定义拦截请求的 系统创建一个NSURLProtocol对象执行startLoading方法开始加载请求 - (void)stopLoading,对于拦截的请求,NSURLProtocol对象在停止加载时调用该方法 + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request,可选方法,对于需要修改请求头的请求在该方法中修改 下面代码定义了一个专门拦截https请求的NSURLProtocol * * @param request 指定的请求 * * @return 返回YES表示要拦截处理,返回NO表示不拦截处理 */ + (BOOL)canInitWithRequest:(NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { return request; } /** * 开始加载,在该方法中,加载一个请求
*)request completionHandler:(void (^)(NSURLRequest *))completionHandler { NSURLRequest *redirectRequest *)requestBySerializingRequest:(NSURLRequest *)request withParameters: *)placeholderImage success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success failure:(void (^)(NSURLRequest //这个方法是下面方法的封装 - (void)loadRequest:(NSURLRequest *)request progress:(NSProgress * _Nullable
请求 // 1.创建请求路径(url) NSURL *url = [NSURL URLWithString:@""]; // 2.通过请求路径(url)创建请求对象(request) NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 3.向服务器发送同步请求(data) NSData *data = [NSURLConnection 1.创建请求路径(url) NSURL *url = [NSURL URLWithString:@""]; // 2.通过请求路径(url)创建请求对象(request) NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 3.向服务器发送异步请求 [NSURLConnection sendAsynchronousRequest *request = [NSURLRequest requestWithURL:url]; // 3.通过代理创建连接对象 [NSURLConnection connectionWithRequest