iOS-NSURLRequest

NSURLRequest 是一个独立的独立加载请求的协议和解决方案,它封装了 load URL 和 the policy,当你发送了网络请求时候可以使用缓存,你可以通过它 propertyForKey:inRequest: 和 setProperty:forKey:inRequest:.这两个方法添加你的协议,

  • NSURLRequest
  • NSMutableURLRequest

NSURLRequest:

初始化:

+ (instancetype)requestWithURL:(NSURL *)URL;
+ (instancetype)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;

- (instancetype)initWithURL:(NSURL *)URL;
- (instancetype)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval NS_DESIGNATED_INITIALIZER;

//默认使用NSURLRequestUseProtocolCachePolicy缓存逻辑 默认请求超时时限为60s

/*
NSURLRequestCachePolicy枚举如下:
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy){
    //默认的缓存协议
    NSURLRequestUseProtocolCachePolicy = 0,
    //无论有无本地缓存数据 都进行从新请求
    NSURLRequestReloadIgnoringLocalCacheData = 1,
    //忽略本地和远程的缓存数据 未实现的策略
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, 
    //无论有无缓存数据 都进行从新请求
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
    //先检查缓存 如果没有缓存再进行请求
    NSURLRequestReturnCacheDataElseLoad = 2,
    //类似离线模式,只读缓存 无论有无缓存都不进行请求
    NSURLRequestReturnCacheDataDontLoad = 3,
    //未实现的策略
    NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};
*/

NSURLRequest请求类除了在初始化时可以设定一些属性,创建出来后则大部分属性都为只读的,无法设置与修改。另一个类NSMutableURLRequest可以更加灵活的设置请求的相关属性。

NSMutableURLRequest

@property (nullable, copy) NSURL *URL; //设置请求的URL
@property NSURLRequestCachePolicy cachePolicy; //设置请求的缓存策略
@property NSTimeInterval timeoutInterval;  //设置超时时间
@property (nullable, copy) NSURL *mainDocumentURL; ////设置缓存目录

@property NSURLRequestNetworkServiceType networkServiceType  //设置网络服务类型
@property BOOL allowsCellularAccess //设置是否允许使用服务商蜂窝网

@property (copy) NSString *HTTPMethod;
@property (nullable, copy) NSData *HTTPBody;
@property (nullable, copy) NSDictionary *allHTTPHeaderFields; //通过字典设置HTTP请求头的键值数据
@property (nullable, retain) NSInputStream *HTTPBodyStream; //设置http请求体的输入流
@property BOOL HTTPShouldHandleCookies; //设置发送请求时是否发送cookie数据

//设置请求头 header
- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(NSString *)field;
//将给定值追加到先前存在的值后面
此方法在重新请求的时候会再次把数据添加到hedaerField中。会导致同样的参数数据有两份,使得服务端会参数获取错误。

- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
//类似字典赋值,同样的key、value只会存一份。

实例:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
request.HTTPMethod   = @"post";//默认是 get
request.URL          = url;
//设置body内容
NSString *bodyString = @"¼�r¹}����9:";
NSData   *bodyData   = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody     = bodyData;

ios 9 以后 HTTP请求错误 ?

//在info.plist
NSAllowsArbitraryLoads

NSAppTransportSecurity


参考:
https://my.oschina.net/u/2340880/blog/620225

你可能感兴趣的:(iOS-NSURLRequest)