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
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
(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]; } 三、加载沙盒内
拦截重定向获取里面的cookie AFHTTPRequestOperation *requestOperation=[[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@""]]]; [requestOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) { if
; } 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
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
步骤: 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
定义一个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; } /** * 开始加载,在该方法中,加载一个请求
请求 // 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
等代理抓包方式全部失效)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 *)
. */ - (BOOL)shouldCacheImage:(UIImage *)image forRequest:(NSURLRequest *)request withAdditionalIdentifier AFImageRequestCache协议的实现 根据请求和标识符将图像加入到内存 - (void)addImage:(UIImage *)image forRequest:(NSURLRequest NSString *)identifier; - (BOOL)removeImageforRequest:(NSURLRequest *)request withAdditionalIdentifier 根据请求和标识符获取内存中图像 - (nullable UIImage *)imageforRequest:(NSURLRequest *)request withAdditionalIdentifier :(nullable NSString *)identifier; - (BOOL)shouldCacheImage:(UIImage *)image forRequest:(NSURLRequest
* defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; //创建请求对象 NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]; //创建session NSURLSessionConfiguration * defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]; NSURLSession * request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]; NSURLSession
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