NSURLSession好基友之NSURLRequest

2018-04-19  本文已影响28人  云天涯丶

一、NSURLRequest介绍

NSURLRequest封装 加载请求的两个基本数据元素:要加载的URL以及在实现时查询URL内容缓存时使用的策略。

NSURLRequest仅用于封装有关URL请求的信息。必须使用其他类(如NSURLSession或NSURLConnection)将这些请求发送到服务器。

NSURLRequest被设计为通过添加为你自己的协议特定属性提供访问方法的类别来扩展以支持其他协议。这些方法可以通过调用NSURLProtocol方法propertyForKey:inRequest:和setProperty:forKey:inRequest:来获取和设置实际值。

NSURLRequest的可变子类是NSMutableURLRequest。

二、API

@interface NSURLRequest : NSObject <NSSecureCoding, NSCopying, NSMutableCopying>
{
    @private
    NSURLRequestInternal *_internal;
}

// NSURLRequest实现是否NSSecureCoding协议
@property (class, readonly) BOOL supportsSecureCoding;

// 使用默认缓存策略和超时创建并返回指定URL的URL请求(NSURLRequestUseProtocolCachePolicy、60s)
+ (instancetype)requestWithURL:(NSURL *)URL;
- (instancetype)initWithURL:(NSURL *)URL;
// 自定义缓存策略和超时值
+ (instancetype)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;
- (instancetype)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval NS_DESIGNATED_INITIALIZER;

// 创建时的参数
@property (nullable, readonly, copy) NSURL *URL;
@property (readonly) NSURLRequestCachePolicy cachePolicy;
@property (readonly) NSTimeInterval timeoutInterval;
// 主文档URL。 在当前实现中,该值未被框架使用。 该方法的全功能版本将在未来可用。
@property (nullable, readonly, copy) NSURL *mainDocumentURL;
// 网络服务类型
@property (readonly) NSURLRequestNetworkServiceType networkServiceType API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0));
// 是否允许请求使用蜂窝无线电(如果存在)。如果蜂窝无线电可以使用 YES; 否则NO
@property (readonly) BOOL allowsCellularAccess  API_AVAILABLE(macos(10.8), ios(6.0), watchos(2.0), tvos(9.0));

@end

@interface NSURLRequest (NSHTTPURLRequest) 
// 接收方的HTTP请求方法。默认是GET
@property (nullable, readonly, copy) NSString *HTTPMethod;
// 接收者的所有HTTP头字段的字典。
@property (nullable, readonly, copy) NSDictionary<NSString *, NSString *> *allHTTPHeaderFields;

- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field;
// 接收者的请求主体数据和主体流 只能设置一个(当然在NSMutableURLRequest设置,这里是readonly)
@property (nullable, readonly, copy) NSData *HTTPBody;
@property (nullable, readonly, retain) NSInputStream *HTTPBodyStream;
// 是否将对此请求使用默认的cookie处理 默认YES
@property (readonly) BOOL HTTPShouldHandleCookies;
// 是否应在接收到来自较早传输的响应之前继续传输数据。
@property (readonly) BOOL HTTPShouldUsePipelining API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0));

@end


// NSMutableURLRequest
@interface NSMutableURLRequest : NSURLRequest

@property (nullable, copy) NSURL *URL;

@property NSURLRequestCachePolicy cachePolicy;

@property NSTimeInterval timeoutInterval;

@property (nullable, copy) NSURL *mainDocumentURL;

@property NSURLRequestNetworkServiceType networkServiceType API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0));

@property BOOL allowsCellularAccess API_AVAILABLE(macos(10.8), ios(6.0), watchos(2.0), tvos(9.0));

@end

@interface NSMutableURLRequest (NSMutableHTTPURLRequest) 


@property (copy) NSString *HTTPMethod;

@property (nullable, copy) NSDictionary<NSString *, NSString *> *allHTTPHeaderFields;

- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(NSString *)field;

- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field;

@property (nullable, copy) NSData *HTTPBody;

@property (nullable, retain) NSInputStream *HTTPBodyStream;

@property BOOL HTTPShouldHandleCookies;

@property BOOL HTTPShouldUsePipelining API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0));

@end

NSURLRequest和NSMutableURLRequest属性、方法基本一致。不同的是NSURLRequest属性readonly,所以操作上我们一般用NSMutableURLRequest

上一篇下一篇

猜你喜欢

热点阅读