From 5b658b86fdf527d0d997f8224a683088c34ec079 Mon Sep 17 00:00:00 2001 From: coderZsq Date: Sun, 22 Nov 2020 13:45:35 +0800 Subject: [PATCH] add --- .../AFNetworking-Debug/ViewController.m | 46 +- .../AFNetworking/AFURLRequestSerialization.h | 254 +++++---- SQDebug/AFNetworking/README.md | 517 +++++++++++++++++- 3 files changed, 661 insertions(+), 156 deletions(-) diff --git a/SQDebug/AFNetworking/AFNetworking-4.0.1-Debug/AFNetworking-Debug/ViewController.m b/SQDebug/AFNetworking/AFNetworking-4.0.1-Debug/AFNetworking-Debug/ViewController.m index 7e215cd5..e82457ce 100644 --- a/SQDebug/AFNetworking/AFNetworking-4.0.1-Debug/AFNetworking-Debug/ViewController.m +++ b/SQDebug/AFNetworking/AFNetworking-4.0.1-Debug/AFNetworking-Debug/ViewController.m @@ -16,7 +16,7 @@ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; - [self sharedNetworkReachability]; + [self debug_AFNURLRequestSerialSerialization]; } - (void)create_a_downloadTask { @@ -115,30 +115,30 @@ - (void)create_an_uploadTask { - (void)create_an_uploadTaskFor_a_MultiPartRequestWithProgress { NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://localhost:8080/afn/uploadTask/upload" parameters:nil constructingBodyWithBlock:^(id formData) { - [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/zhushuangquan/Desktop/AFN.png"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; - } error:nil]; + [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/zhushuangquan/Desktop/AFN.png"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; + } error:nil]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; - + NSURLSessionUploadTask *uploadTask; uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) { - // This is not called back on the main queue. - // You are responsible for dispatching to the main queue for UI updates - dispatch_async(dispatch_get_main_queue(), ^{ - //Update the progress view - [self.progressView setProgress:uploadProgress.fractionCompleted]; - }); - } + // This is not called back on the main queue. + // You are responsible for dispatching to the main queue for UI updates + dispatch_async(dispatch_get_main_queue(), ^{ + //Update the progress view + [self.progressView setProgress:uploadProgress.fractionCompleted]; + }); + } completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { - if (error) { - NSLog(@"Error: %@", error); - } else { - NSLog(@"%@ %@", response, responseObject); - } - }]; - + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } + }]; + [uploadTask resume]; } @@ -146,7 +146,7 @@ - (void)create_a_dataTask { NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; - + NSURL *URL = [NSURL URLWithString:@"http://localhost:8080/afn/dataTask/get"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { @@ -167,4 +167,12 @@ - (void)sharedNetworkReachability { [[AFNetworkReachabilityManager sharedManager] startMonitoring]; } +- (void)debug_AFNURLRequestSerialSerialization { + NSLog(@"URL: %@", AFPercentEscapedStringFromString(@"http://localhost:8080/afn/dataTask/get?a=1&b=2&c=3")); + // URL: http%3A//localhost%3A8080/afn/dataTask/get?a%3D1%26b%3D2%26c%3D3 + + NSLog(@"QueryString: %@", AFQueryStringFromParameters(@{@"a": @1, @"b": @2, @"c": @3})); + // QueryString: a=1&b=2&c=3 +} + @end diff --git a/SQDebug/AFNetworking/AFNetworking-4.0.1/AFNetworking/AFURLRequestSerialization.h b/SQDebug/AFNetworking/AFNetworking-4.0.1/AFNetworking/AFURLRequestSerialization.h index b17e871e..57c6e4db 100644 --- a/SQDebug/AFNetworking/AFNetworking-4.0.1/AFNetworking/AFURLRequestSerialization.h +++ b/SQDebug/AFNetworking/AFNetworking-4.0.1/AFNetworking/AFURLRequestSerialization.h @@ -31,45 +31,43 @@ NS_ASSUME_NONNULL_BEGIN /** - Returns a percent-escaped string following RFC 3986 for a query string key or value. - RFC 3986 states that the following characters are "reserved" characters. - - General Delimiters: ":", "#", "[", "]", "@", "?", "/" - - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" - - In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow - query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" - should be percent-escaped in the query string. - - @param string The string to be percent-escaped. - - @return The percent-escaped string. + 返回遵循RFC 3986的查询字符串键或值的百分比转义字符串。 + RFC 3986声明以下字符为“保留”字符。 + -通用分隔符:“:”,“#”,“ [”,“]”,“ @”,“?”,“ /” + -子定界符:“!”,“ $”,“&”,“'”,“(”,“)”,“ *”,“ +”,“,”,“,”,“ =” + + 在RFC 3986-3.4节中,它指出“?” 和“ /”字符不应转义以允许查询字符串包含URL。 因此,所有“保留”字符(“?”除外) 和“ /”应该在查询字符串中转义。 + + @param string 要百分号转义的字符串。 + + @return换码百分比的字符串。 */ FOUNDATION_EXPORT NSString * AFPercentEscapedStringFromString(NSString *string); /** - A helper method to generate encoded url query parameters for appending to the end of a URL. + 一种辅助方法,用于生成编码后的URL查询参数,以附加到URL的末尾。 - @param parameters A dictionary of key/values to be encoded. + @param parameters 要编码的键/值的字典。 - @return A url encoded query string + @return网址编码的查询字符串 */ FOUNDATION_EXPORT NSString * AFQueryStringFromParameters(NSDictionary *parameters); /** - The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary. + 对象采用“ AFURLRequestSerialization”协议,该协议对指定HTTP请求的参数进行编码。 请求序列化程序可以将参数编码为查询字符串,HTTP正文,并根据需要设置适当的HTTP标头字段。 - For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`. + 例如,JSON请求序列化程序可以将请求的HTTP主体设置为JSON表示,并将“ Content-Type” HTTP标头字段值设置为“ application / json”。 */ @protocol AFURLRequestSerialization /** - Returns a request with the specified parameters encoded into a copy of the original request. + 返回带有已编码为原始请求副本的指定参数的请求。 - @param request The original request. - @param parameters The parameters to be encoded. - @param error The error that occurred while attempting to encode the request parameters. + @param request 原始请求。 + @param parameters 要编码的参数。 + @param error 尝试对请求参数进行编码时发生的错误。 - @return A serialized request. + @return 序列化的请求。 */ - (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request withParameters:(nullable id)parameters @@ -89,150 +87,150 @@ typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { @protocol AFMultipartFormData; /** - `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + AFHTTPRequestSerializer符合AFURLRequestSerialization和AFURLResponseSerialization协议,提供查询字符串/ URL格式编码的参数序列化和默认请求标头的具体基础实现,以及响应状态代码和内容类型验证。 - Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior. + 鼓励任何处理HTTP的请求或响应序列化器都继承AFHTTPRequestSerializer的子类,以确保一致的默认行为。 */ @interface AFHTTPRequestSerializer : NSObject /** - The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default. + 用于序列化参数的字符串编码。 默认情况下,`NSUTF8StringEncoding`。 */ @property (nonatomic, assign) NSStringEncoding stringEncoding; /** - Whether created requests can use the device’s cellular radio (if present). `YES` by default. + 创建的请求是否可以使用设备的蜂窝无线电(如果有)。 默认为YES。 - @see NSMutableURLRequest -setAllowsCellularAccess: + @see NSMutableURLRequest -setAllowsCellularAccess: */ @property (nonatomic, assign) BOOL allowsCellularAccess; /** - The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default. + 创建的请求的缓存策略。 默认情况下,`NSURLRequestUseProtocolCachePolicy`。 - @see NSMutableURLRequest -setCachePolicy: + @see NSMutableURLRequest -setCachePolicy: */ @property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; /** - Whether created requests should use the default cookie handling. `YES` by default. + 创建的请求是否应使用默认的cookie处理。 默认为YES。 - @see NSMutableURLRequest -setHTTPShouldHandleCookies: + @see NSMutableURLRequest -setHTTPShouldHandleCookies: */ @property (nonatomic, assign) BOOL HTTPShouldHandleCookies; /** - Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default + 在收到来自较早传输的响应之前,创建的请求是否可以继续传输数据。 默认为“否” - @see NSMutableURLRequest -setHTTPShouldUsePipelining: + @see NSMutableURLRequest -setHTTPShouldUsePipelining: */ @property (nonatomic, assign) BOOL HTTPShouldUsePipelining; /** - The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default. + 创建的请求的网络服务类型。 默认情况下为“ NSURLNetworkServiceTypeDefault”。 - @see NSMutableURLRequest -setNetworkServiceType: + @see NSMutableURLRequest -setNetworkServiceType: */ @property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; /** - The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds. + 创建的请求的超时间隔(以秒为单位)。 默认超时间隔为60秒。 - @see NSMutableURLRequest -setTimeoutInterval: + @see NSMutableURLRequest -setTimeoutInterval: */ @property (nonatomic, assign) NSTimeInterval timeoutInterval; ///--------------------------------------- -/// @name Configuring HTTP Request Headers +/// @name 配置HTTP请求头 ///--------------------------------------- /** - Default HTTP header field values to be applied to serialized requests. By default, these include the following: + 要应用于序列化请求的默认HTTP标头字段值。 默认情况下,这些内容包括: - - `Accept-Language` with the contents of `NSLocale +preferredLanguages` - - `User-Agent` with the contents of various bundle identifiers and OS designations + -具有NSLocale + preferredLanguages内容的`Accept-Language` + -`User-Agent`,其中包含各种捆绑包标识符和操作系统名称的内容 - @discussion To add or remove default request headers, use `setValue:forHTTPHeaderField:`. + @discussion 要添加或删除默认请求头,请使用`setValue:forHTTPHeaderField:`。 */ @property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; /** - Creates and returns a serializer with default configuration. + 用默认配置创建并返回一个序列化器。 */ + (instancetype)serializer; /** - Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. + 设置在HTTP客户端发出的请求对象中设置的HTTP标头的值。 如果为nil,则删除该标头的现有值。 - @param field The HTTP header to set a default value for - @param value The value set as default for the specified header, or `nil` + @param field 用于设置默认值的HTTP标头 + @param value 为指定的标头设置的默认值,或者为'nil' */ - (void)setValue:(nullable NSString *)value forHTTPHeaderField:(NSString *)field; /** - Returns the value for the HTTP headers set in the request serializer. + 返回在请求序列化程序中设置的HTTP标头的值。 - @param field The HTTP header to retrieve the default value for + @param field 用于检索默认值的HTTP标头 - @return The value set as default for the specified header, or `nil` + @return 为指定标题设置的默认值,或者为'nil' */ - (nullable NSString *)valueForHTTPHeaderField:(NSString *)field; /** - Sets the "Authorization" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header. + 将HTTP客户端在请求对象中设置的“ Authorization” HTTP标头设置为具有Base64编码的用户名和密码的基本身份验证值。 这将覆盖此标头的任何现有值。 - @param username The HTTP basic auth username - @param password The HTTP basic auth password + @param username HTTP基本身份验证用户名 + @param password HTTP基本身份验证密码 */ - (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username password:(NSString *)password; /** - Clears any existing value for the "Authorization" HTTP header. + 清除“Authorization” HTTP标头的任何现有值。 */ - (void)clearAuthorizationHeader; ///------------------------------------------------------- -/// @name Configuring Query String Parameter Serialization +/// @name 配置查询字符串参数序列化 ///------------------------------------------------------- /** - HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default. + 序列化请求的HTTP方法会将参数编码为查询字符串。 默认情况下,`GET`,`HEAD`和`DELETE`。 */ @property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; /** - Set the method of query string serialization according to one of the pre-defined styles. + 根据预定义的样式之一设置查询字符串序列化的方法。 - @param style The serialization style. + @param style 序列化样式。 - @see AFHTTPRequestQueryStringSerializationStyle + @see AFHTTPRequestQueryStringSerializationStyle */ - (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; /** - Set the a custom method of query string serialization according to the specified block. + 根据指定的块设置查询字符串序列化的自定义方法。 - @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. + @param block 定义将参数编码为查询字符串的过程的块。 该块返回查询字符串,并接受三个参数:请求,要编码的参数以及尝试对给定请求的参数进行编码时发生的错误。 */ - (void)setQueryStringSerializationWithBlock:(nullable NSString * _Nullable (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; ///------------------------------- -/// @name Creating Request Objects +/// @name 创建请求对象 ///------------------------------- /** - Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string. + 使用指定的HTTP方法和URL字符串创建一个NSMutableURLRequest对象。 - If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body. + 如果HTTP方法是`GET`,`HEAD`或`DELETE`,则参数将用于构造附加到请求URL的url编码查询字符串。 否则,将根据“ parameterEncoding”属性的值对参数进行编码,并将其设置为请求正文。 - @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`. - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body. - @param error The error that occurred while constructing the request. + @param method 请求的HTTP方法,例如“ GET”,“ POST”,“ PUT”或“ DELETE”。 该参数不能为“ nil”。 + @param URLString 用于创建请求URL的URL字符串。 + @param parameters 将被设置为GET请求的查询字符串或请求HTTP正文的参数。 + @param error 构造请求时发生的错误。 - @return An `NSMutableURLRequest` object. + @return 一个NSMutableURLRequest对象。 */ - (nullable NSMutableURLRequest *)requestWithMethod:(NSString *)method URLString:(NSString *)URLString @@ -240,17 +238,17 @@ forHTTPHeaderField:(NSString *)field; error:(NSError * _Nullable __autoreleasing *)error; /** - Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 + 使用指定的HTTP方法和URLString创建一个“ NSMutableURLRequest”对象,并使用指定的参数和多部分表单数据块构造一个“ multipart / form-data” HTTP正文。参见http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 - Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream. + 多部分表单请求会自动进行流传输,直接从磁盘读取文件以及单个HTTP正文中的内存数据。产生的NSMutableURLRequest对象具有HTTPBodyStream属性,因此请不要在此请求对象上设置HTTPBodyStream或HTTPBody,因为它将清除多部分表单主体流。 - @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`. - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded and set in the request HTTP body. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param error The error that occurred while constructing the request. + @param method 请求的HTTP方法。此参数不能为“ GET”,“ HEAD”或“ nil”。 + @param URLString 用于创建请求URL的URL字符串。 + @param parameters 在请求HTTP正文中要编码和设置的参数。 + @param block 一个接受单个参数并将数据附加到HTTP正文的块。 block参数是采用AFMultipartFormData协议的对象。 + @param error 构造请求时发生的错误。 - @return An `NSMutableURLRequest` object + @return 一个NSMutableURLRequest对象 */ - (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method URLString:(NSString *)URLString @@ -259,15 +257,15 @@ forHTTPHeaderField:(NSString *)field; error:(NSError * _Nullable __autoreleasing *)error; /** - Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished. + 通过从请求中删除HTTPBodyStream来创建NSMutableURLRequest,并将其内容异步写入指定的文件,并在完成时调用完成处理程序。 - @param request The multipart form request. The `HTTPBodyStream` property of `request` must not be `nil`. - @param fileURL The file URL to write multipart form contents to. - @param handler A handler block to execute. + @param request 多部分表单请求。 request的HTTPBodyStream属性不能为nil。 + @param fileURL 要写入多部分表单内容的文件URL。 + @param handler 要执行的处理程序块。 - @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request. + @discussion NSURLSessionTask中存在一个错误,该错误导致请求从HTTP正文流传输内容时请求不发送Content-Length标头,这在与Amazon S3 Web服务进行交互时尤其成问题。解决方法是,此方法采用一个由multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:构造的请求,或带有HTTPBodyStream的任何其他请求,将内容写入指定的文件,并返回原始请求的副本。 HTTPBodyStream属性设置为nil。在这里,文件可以传递到AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`,或将其内容读入分配给请求的HTTPBody属性的NSData中。 - @see https://github.com/AFNetworking/AFNetworking/issues/1398 + @see https://github.com/AFNetworking/AFNetworking/issues/1398 */ - (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request writingStreamContentsToFile:(NSURL *)fileURL @@ -278,35 +276,35 @@ forHTTPHeaderField:(NSString *)field; #pragma mark - /** - The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`. + AFMultipartFormData协议定义了AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:的block参数中参数所支持的方法。 */ @protocol AFMultipartFormData /** - Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary. + 附加HTTP标头`Content-Disposition:file; filename =#{生成的文件名}; name =#{name}”和“ Content-Type:#{生成的mimeType}”,然后是编码的文件数据和多部分表单边界。 - The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively. + 表单中此数据的文件名和MIME类型将分别使用`fileURL`的最后一个路径部分和`fileURL`扩展名与系统相关的MIME类型自动生成。 - @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + @param fileURL 对应于其内容将附加到表单的文件的URL。 该参数不能为“ nil”。 + @param name 与指定数据关联的名称。 该参数不能为“ nil”。 + @param error 如果发生错误,返回时将包含一个描述问题的NSError对象。 - @return `YES` if the file data was successfully appended, otherwise `NO`. + @如果文件数据已成功添加,则返回“是”,否则返回“否”。 */ - (BOOL)appendPartWithFileURL:(NSURL *)fileURL name:(NSString *)name error:(NSError * _Nullable __autoreleasing *)error; /** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + 附加HTTP标头`Content-Disposition:file; filename =#{filename}; name =#{name}”和“ Content-Type:#{mimeType}”,然后是编码文件数据和多部分表单边界。 - @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`. - @param mimeType The declared MIME type of the file data. This parameter must not be `nil`. - @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + @param fileURL 对应于其内容将附加到表单的文件的URL。 该参数不能为“ nil”。 + @param name 与指定数据关联的名称。 该参数不能为“ nil”。 + @param fileName 在Content-Disposition标头中使用的文件名。 该参数不能为“ nil”。 + @param mimeType 文件数据的声明的MIME类型。 该参数不能为“ nil”。 + @param error 如果发生错误,返回时将包含一个描述问题的NSError对象。 - @return `YES` if the file data was successfully appended otherwise `NO`. + @如果文件数据已成功添加,则返回“是”,否则返回“否”。 */ - (BOOL)appendPartWithFileURL:(NSURL *)fileURL name:(NSString *)name @@ -315,13 +313,13 @@ forHTTPHeaderField:(NSString *)field; error:(NSError * _Nullable __autoreleasing *)error; /** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary. + 附加HTTP标头`Content-Disposition:file; filename =#{filename}; name =#{name}”和“ Content-Type:#{mimeType}”,然后是来自输入流的数据和多部分表单边界。 - @param inputStream The input stream to be appended to the form data - @param name The name to be associated with the specified input stream. This parameter must not be `nil`. - @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`. - @param length The length of the specified input stream in bytes. - @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + @param inputStream 要添加到表单数据的输入流 + @param name 与指定的输入流关联的名称。 该参数不能为“ nil”。 + @param fileName 与指定输入流关联的文件名。 该参数不能为“ nil”。 + @param length 以字节为单位的指定输入流的长度。 + @param mimeType 指定数据的MIME类型。 (例如,JPEG图像的MIME类型为image / jpeg。)有关有效MIME类型的列表,请参见http://www.iana.org/assignments/media-types/。 该参数不能为“ nil”。 */ - (void)appendPartWithInputStream:(nullable NSInputStream *)inputStream name:(NSString *)name @@ -330,12 +328,12 @@ forHTTPHeaderField:(NSString *)field; mimeType:(NSString *)mimeType; /** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + 附加HTTP标头`Content-Disposition:file; filename =#{filename}; name =#{name}”和“ Content-Type:#{mimeType}”,然后是编码文件数据和多部分表单边界。 - @param data The data to be encoded and appended to the form data. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param fileName The filename to be associated with the specified data. This parameter must not be `nil`. - @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + @param data 要编码并附加到表单数据的数据。 + @param name 与指定数据关联的名称。 该参数不能为“ nil”。 + @param fileName 与指定数据关联的文件名。 该参数不能为“ nil”。 + @param mimeType 指定数据的MIME类型。 (例如,JPEG图像的MIME类型为image / jpeg。)有关有效MIME类型的列表,请参见http://www.iana.org/assignments/media-types/。 该参数不能为“ nil”。 */ - (void)appendPartWithFileData:(NSData *)data name:(NSString *)name @@ -343,10 +341,10 @@ forHTTPHeaderField:(NSString *)field; mimeType:(NSString *)mimeType; /** - Appends the HTTP headers `Content-Disposition: form-data; name=#{name}"`, followed by the encoded data and the multipart form boundary. + 附加HTTP标头`Content-Disposition:form-data; name =#{name}“`,后跟编码数据和多部分表单边界。 - @param data The data to be encoded and appended to the form data. - @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param data 要编码并附加到表单数据的数据。 + @param name 与指定数据关联的名称。 该参数不能为“ nil”。 */ - (void)appendPartWithFormData:(NSData *)data @@ -354,21 +352,21 @@ forHTTPHeaderField:(NSString *)field; /** - Appends HTTP headers, followed by the encoded data and the multipart form boundary. + 附加HTTP标头,后跟编码数据和多部分表单边界。 - @param headers The HTTP headers to be appended to the form data. - @param body The data to be encoded and appended to the form data. This parameter must not be `nil`. + @param headers 要附加到表单数据的HTTP标头。 + @param body 要编码并附加到表单数据的数据。 该参数不能为“ nil”。 */ - (void)appendPartWithHeaders:(nullable NSDictionary *)headers body:(NSData *)body; /** - Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream. + 节流通过限制数据包大小并为从上传流中读取的每个数据块增加延迟来请求带宽。 - When uploading over a 3G or EDGE connection, requests may fail with "request body stream exhausted". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the "request body stream exhausted" in a failure block, and then retrying the request with throttled bandwidth. + 通过3G或EDGE连接上载时,请求可能会失败,并显示“请求正文流已耗尽”。根据建议值(kAFUploadStream3GSuggestedPacketSize和kAFUploadStream3GSuggestedDelay)设置最大数据包大小和延迟,可降低输入流超过其分配带宽的风险。不幸的是,没有确定的方法来区分通过NSURLConnection的3G,EDGE或LTE连接。因此,不建议您仅根据网络可达性来限制带宽。相反,您应该考虑在故障块中检查“请求正文流已耗尽”,然后使用限制带宽重试该请求。 - @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb. - @param delay Duration of delay each time a packet is read. By default, no delay is set. + @param numberOfBytes 最大数据包大小,以字节数为单位。输入流的默认数据包大小为16kb。 + @param delay 每次读取数据包时的延迟持续时间。默认情况下,不设置延迟。 */ - (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes delay:(NSTimeInterval)delay; @@ -378,19 +376,19 @@ forHTTPHeaderField:(NSString *)field; #pragma mark - /** - `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`. + AFJSONRequestSerializer是AFHTTPRequestSerializer的子类,它使用NSJSONSerialization将参数编码为JSON,将编码请求的Content-Type设置为application / json。 */ @interface AFJSONRequestSerializer : AFHTTPRequestSerializer /** - Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONWritingOptions". `0` by default. + 用于从Foundation对象写入请求JSON数据的选项。 有关可能的值,请参见“ NSJSONSerialization”文档部分“ NSJSONWritingOptions”。 默认为0。 */ @property (nonatomic, assign) NSJSONWritingOptions writingOptions; /** - Creates and returns a JSON serializer with specified reading and writing options. + 创建并返回带有指定读写选项的JSON序列化程序。 - @param writingOptions The specified JSON writing options. + @param writingOptions 指定的JSON写入选项。 */ + (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; @@ -399,27 +397,27 @@ forHTTPHeaderField:(NSString *)field; #pragma mark - /** - `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`. + AFPropertyListRequestSerializer是AFHTTPRequestSerializer的子类,它使用NSPropertyListSerializer将参数编码为JSON,并将编码后的请求的Content-Type设置为application / x-plist。 */ @interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer /** - The property list format. Possible values are described in "NSPropertyListFormat". + 属性列表格式。 可能的值在“ NSPropertyListFormat”中描述。 */ @property (nonatomic, assign) NSPropertyListFormat format; /** - @warning The `writeOptions` property is currently unused. + @warning`writeOptions`属性当前未使用。 */ @property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; /** - Creates and returns a property list serializer with a specified format, read options, and write options. + 创建并返回具有指定格式,读取选项和写入选项的属性列表序列化程序。 - @param format The property list format. - @param writeOptions The property list write options. + @param format 属性列表格式。 + @param writeOptions 属性列表写入选项。 - @warning The `writeOptions` property is currently unused. + @warning`writeOptions`属性当前未使用。 */ + (instancetype)serializerWithFormat:(NSPropertyListFormat)format writeOptions:(NSPropertyListWriteOptions)writeOptions; diff --git a/SQDebug/AFNetworking/README.md b/SQDebug/AFNetworking/README.md index 7215507f..45d86cf0 100644 --- a/SQDebug/AFNetworking/README.md +++ b/SQDebug/AFNetworking/README.md @@ -276,18 +276,13 @@ router.get('/dataTask/get', (ctx, next) => { ```objc /* - * Configuration options for an NSURLSession. When a session is - * created, a copy of the configuration object is made - you cannot - * modify the configuration of a session after it has been created. + * NSURLSession的配置选项。 创建会话后,将创建配置对象的副本-创建会话后,您将无法修改会话的配置。 * - * The shared session uses the global singleton credential, cache - * and cookie storage objects. + * 共享会话使用全局单例凭证,缓存和cookie存储对象。 * - * An ephemeral session has no persistent disk storage for cookies, - * cache or credentials. + * 临时会话没有用于cookie,缓存或凭据的持久磁盘存储。 * - * A background session can be used to perform networking operations - * on behalf of a suspended application, within certain constraints. + * 在某些约束下,后台会话可用于代表暂停的应用程序执行联网操作。 */ API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0)) @interface NSURLSessionConfiguration : NSObject @@ -408,3 +403,507 @@ $ tree └── AFURLResponseSerialization.m ``` +AFNetworking.h +```objc +#import +#import +#import + +#ifndef _AFNETWORKING_ + #define _AFNETWORKING_ + + #import "AFURLRequestSerialization.h" + #import "AFURLResponseSerialization.h" + #import "AFSecurityPolicy.h" + +#if !TARGET_OS_WATCH + #import "AFNetworkReachabilityManager.h" +#endif + + #import "AFURLSessionManager.h" + #import "AFHTTPSessionManager.h" + +#endif /* _AFNETWORKING_ */ +``` + +```objc +#import +``` + +``` +这些宏用于OS头文件。 它们使函数原型和Objective-C方法可以使用首次使用的OS版本进行标记。 以及不适用的操作系统版本(如果适用)。 +``` + +```objc +#import +``` + +``` +File: TargetConditionals.h + +Contains: Mac OS X和iPhone的TARGET_条件的自动配置 + + Note: 3.4通用接口中的TargetConditionals.h适用于所有编译器。 + 此标头仅识别已知可在Mac OS X上运行的编译器。 + + +----------------------------------------------------------------+ + | TARGET_OS_MAC | + | +---+ +-----------------------------------------------------+ | + | | | | TARGET_OS_IPHONE | | + | |OSX| | +-----+ +----+ +-------+ +--------+ +-------------+ | | + | | | | | IOS | | TV | | WATCH | | BRIDGE | | MACCATALYST | | | + | | | | +-----+ +----+ +-------+ +--------+ +-------------+ | | + | +---+ +-----------------------------------------------------+ | + +----------------------------------------------------------------+ +``` + +```objc + #import "AFURLRequestSerialization.h" + #import "AFURLResponseSerialization.h" + #import "AFSecurityPolicy.h" + +#if !TARGET_OS_WATCH + #import "AFNetworkReachabilityManager.h" +#endif + + #import "AFURLSessionManager.h" + #import "AFHTTPSessionManager.h" +``` + +```objc +#import "AFURLRequestSerialization.h" +``` + +```objc +/** + 返回遵循RFC 3986的查询字符串键或值的百分比转义字符串。 + RFC 3986声明以下字符为“保留”字符。 + -通用分隔符:“:”,“#”,“ [”,“]”,“ @”,“?”,“ /” + -子定界符:“!”,“ $”,“&”,“'”,“(”,“)”,“ *”,“ +”,“,”,“,”,“ =” + + 在RFC 3986-3.4节中,它指出“?” 和“ /”字符不应转义以允许查询字符串包含URL。 因此,所有“保留”字符(“?”除外) 和“ /”应该在查询字符串中转义。 + + @param string 要百分号转义的字符串。 + + @return换码百分比的字符串。 + */ +FOUNDATION_EXPORT NSString * AFPercentEscapedStringFromString(NSString *string); +``` + +```objc +NSLog(@"URL: %@", AFPercentEscapedStringFromString(@"http://localhost:8080/afn/dataTask/get?a=1&b=2&c=3")); +``` + +``` +URL: http%3A//localhost%3A8080/afn/dataTask/get?a%3D1%26b%3D2%26c%3D3 +``` + +```objc +/** + 一种辅助方法,用于生成编码后的URL查询参数,以附加到URL的末尾。 + + @param parameters 要编码的键/值的字典。 + + @return网址编码的查询字符串 + */ +FOUNDATION_EXPORT NSString * AFQueryStringFromParameters(NSDictionary *parameters); +``` + +```objc +NSLog(@"QueryString: %@", AFQueryStringFromParameters(@{@"a": @1, @"b": @2, @"c": @3})); +``` + +``` +QueryString: a=1&b=2&c=3 +``` + +```objc +/** + 对象采用“ AFURLRequestSerialization”协议,该协议对指定HTTP请求的参数进行编码。 请求序列化程序可以将参数编码为查询字符串,HTTP正文,并根据需要设置适当的HTTP标头字段。 + + 例如,JSON请求序列化程序可以将请求的HTTP主体设置为JSON表示,并将“ Content-Type” HTTP标头字段值设置为“ application / json”。 + */ +@protocol AFURLRequestSerialization + +/** + 返回带有已编码为原始请求副本的指定参数的请求。 + + @param request 原始请求。 + @param parameters 要编码的参数。 + @param error 尝试对请求参数进行编码时发生的错误。 + + @return 序列化的请求。 + */ +- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(nullable id)parameters + error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW; + +@end +``` + +```objc +/** + AFURLRequestSerialization.h line: 210 + 默认请求参数序列化样式 + */ +typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { + AFHTTPRequestQueryStringDefaultStyle = 0, +}; +``` + +```objc +/** + AFURLRequestSerialization.h line: 281 + */ +@protocol AFMultipartFormData; +``` + +```objc +/** + AFMultipartFormData协议定义了AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:的block参数中参数所支持的方法。 + */ +@protocol AFMultipartFormData + +/** + 附加HTTP标头`Content-Disposition:file; filename =#{生成的文件名}; name =#{name}”和“ Content-Type:#{生成的mimeType}”,然后是编码的文件数据和多部分表单边界。 + + 表单中此数据的文件名和MIME类型将分别使用`fileURL`的最后一个路径部分和`fileURL`扩展名与系统相关的MIME类型自动生成。 + + @param fileURL 对应于其内容将附加到表单的文件的URL。 该参数不能为“ nil”。 + @param name 与指定数据关联的名称。 该参数不能为“ nil”。 + @param error 如果发生错误,返回时将包含一个描述问题的NSError对象。 + + @如果文件数据已成功添加,则返回“是”,否则返回“否”。 + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * _Nullable __autoreleasing *)error; + +/** + 附加HTTP标头`Content-Disposition:file; filename =#{filename}; name =#{name}”和“ Content-Type:#{mimeType}”,然后是编码文件数据和多部分表单边界。 + + @param fileURL 对应于其内容将附加到表单的文件的URL。 该参数不能为“ nil”。 + @param name 与指定数据关联的名称。 该参数不能为“ nil”。 + @param fileName 在Content-Disposition标头中使用的文件名。 该参数不能为“ nil”。 + @param mimeType 文件数据的声明的MIME类型。 该参数不能为“ nil”。 + @param error 如果发生错误,返回时将包含一个描述问题的NSError对象。 + + @如果文件数据已成功添加,则返回“是”,否则返回“否”。 + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * _Nullable __autoreleasing *)error; + +/** + 附加HTTP标头`Content-Disposition:file; filename =#{filename}; name =#{name}”和“ Content-Type:#{mimeType}”,然后是来自输入流的数据和多部分表单边界。 + + @param inputStream 要添加到表单数据的输入流 + @param name 与指定的输入流关联的名称。 该参数不能为“ nil”。 + @param fileName 与指定输入流关联的文件名。 该参数不能为“ nil”。 + @param length 以字节为单位的指定输入流的长度。 + @param mimeType 指定数据的MIME类型。 (例如,JPEG图像的MIME类型为image / jpeg。)有关有效MIME类型的列表,请参见http://www.iana.org/assignments/media-types/。 该参数不能为“ nil”。 + */ +- (void)appendPartWithInputStream:(nullable NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType; + +/** + 附加HTTP标头`Content-Disposition:file; filename =#{filename}; name =#{name}”和“ Content-Type:#{mimeType}”,然后是编码文件数据和多部分表单边界。 + + @param data 要编码并附加到表单数据的数据。 + @param name 与指定数据关联的名称。 该参数不能为“ nil”。 + @param fileName 与指定数据关联的文件名。 该参数不能为“ nil”。 + @param mimeType 指定数据的MIME类型。 (例如,JPEG图像的MIME类型为image / jpeg。)有关有效MIME类型的列表,请参见http://www.iana.org/assignments/media-types/。 该参数不能为“ nil”。 + */ +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType; + +/** + 附加HTTP标头`Content-Disposition:form-data; name =#{name}“`,后跟编码数据和多部分表单边界。 + + @param data 要编码并附加到表单数据的数据。 + @param name 与指定数据关联的名称。 该参数不能为“ nil”。 + */ + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name; + + +/** + 附加HTTP标头,后跟编码数据和多部分表单边界。 + + @param headers 要附加到表单数据的HTTP标头。 + @param body 要编码并附加到表单数据的数据。 该参数不能为“ nil”。 + */ +- (void)appendPartWithHeaders:(nullable NSDictionary *)headers + body:(NSData *)body; + +/** + 节流通过限制数据包大小并为从上传流中读取的每个数据块增加延迟来请求带宽。 + + 通过3G或EDGE连接上载时,请求可能会失败,并显示“请求正文流已耗尽”。根据建议值(kAFUploadStream3GSuggestedPacketSize和kAFUploadStream3GSuggestedDelay)设置最大数据包大小和延迟,可降低输入流超过其分配带宽的风险。不幸的是,没有确定的方法来区分通过NSURLConnection的3G,EDGE或LTE连接。因此,不建议您仅根据网络可达性来限制带宽。相反,您应该考虑在故障块中检查“请求正文流已耗尽”,然后使用限制带宽重试该请求。 + + @param numberOfBytes 最大数据包大小,以字节数为单位。输入流的默认数据包大小为16kb。 + @param delay 每次读取数据包时的延迟持续时间。默认情况下,不设置延迟。 + */ +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay; + +@end +``` + +```objc +@interface AFHTTPRequestSerializer : NSObject +``` + +```objc +/** + AFHTTPRequestSerializer符合AFURLRequestSerialization和AFURLResponseSerialization协议,提供查询字符串/ URL格式编码的参数序列化和默认请求标头的具体基础实现,以及响应状态代码和内容类型验证。 + + 鼓励任何处理HTTP的请求或响应序列化器都继承AFHTTPRequestSerializer的子类,以确保一致的默认行为。 + */ +@interface AFHTTPRequestSerializer : NSObject + +/** + 用于序列化参数的字符串编码。 默认情况下,`NSUTF8StringEncoding`。 + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + 创建的请求是否可以使用设备的蜂窝无线电(如果有)。 默认为YES。 + + @see NSMutableURLRequest -setAllowsCellularAccess: + */ +@property (nonatomic, assign) BOOL allowsCellularAccess; + +/** + 创建的请求的缓存策略。 默认情况下,`NSURLRequestUseProtocolCachePolicy`。 + + @see NSMutableURLRequest -setCachePolicy: + */ +@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; + +/** + 创建的请求是否应使用默认的cookie处理。 默认为YES。 + + @see NSMutableURLRequest -setHTTPShouldHandleCookies: + */ +@property (nonatomic, assign) BOOL HTTPShouldHandleCookies; + +/** +在收到来自较早传输的响应之前,创建的请求是否可以继续传输数据。 默认为“否” + + @see NSMutableURLRequest -setHTTPShouldUsePipelining: + */ +@property (nonatomic, assign) BOOL HTTPShouldUsePipelining; + +/** +创建的请求的网络服务类型。 默认情况下为“ NSURLNetworkServiceTypeDefault”。 + + @see NSMutableURLRequest -setNetworkServiceType: + */ +@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; + +/** + 创建的请求的超时间隔(以秒为单位)。 默认超时间隔为60秒。 + + @see NSMutableURLRequest -setTimeoutInterval: + */ +@property (nonatomic, assign) NSTimeInterval timeoutInterval; + +///--------------------------------------- +/// @name 配置HTTP请求头 +///--------------------------------------- + +/** + 要应用于序列化请求的默认HTTP标头字段值。 默认情况下,这些内容包括: + + -具有NSLocale + preferredLanguages内容的`Accept-Language` + -`User-Agent`,其中包含各种捆绑包标识符和操作系统名称的内容 + + @discussion 要添加或删除默认请求头,请使用`setValue:forHTTPHeaderField:`。 + */ +@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; + +/** + 用默认配置创建并返回一个序列化器。 + */ ++ (instancetype)serializer; + +/** + 设置在HTTP客户端发出的请求对象中设置的HTTP标头的值。 如果为nil,则删除该标头的现有值。 + + @param field 用于设置默认值的HTTP标头 + @param value 为指定的标头设置的默认值,或者为'nil' + */ +- (void)setValue:(nullable NSString *)value +forHTTPHeaderField:(NSString *)field; + +/** + 返回在请求序列化程序中设置的HTTP标头的值。 + + @param field 用于检索默认值的HTTP标头 + + @return 为指定标题设置的默认值,或者为'nil' + */ +- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field; + +/** + 将HTTP客户端在请求对象中设置的“ Authorization” HTTP标头设置为具有Base64编码的用户名和密码的基本身份验证值。 这将覆盖此标头的任何现有值。 + + @param username HTTP基本身份验证用户名 + @param password HTTP基本身份验证密码 + */ +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password; + +/** + 清除“Authorization” HTTP标头的任何现有值。 + */ +- (void)clearAuthorizationHeader; + +///------------------------------------------------------- +/// @name 配置查询字符串参数序列化 +///------------------------------------------------------- + +/** + 序列化请求的HTTP方法会将参数编码为查询字符串。 默认情况下,`GET`,`HEAD`和`DELETE`。 + */ +@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; + +/** + 根据预定义的样式之一设置查询字符串序列化的方法。 + + @param style 序列化样式。 + + @see AFHTTPRequestQueryStringSerializationStyle + */ +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; + +/** + 根据指定的块设置查询字符串序列化的自定义方法。 + + @param block 定义将参数编码为查询字符串的过程的块。 该块返回查询字符串,并接受三个参数:请求,要编码的参数以及尝试对给定请求的参数进行编码时发生的错误。 + */ +- (void)setQueryStringSerializationWithBlock:(nullable NSString * _Nullable (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; + +///------------------------------- +/// @name 创建请求对象 +///------------------------------- + +/** + 使用指定的HTTP方法和URL字符串创建一个NSMutableURLRequest对象。 + + 如果HTTP方法是`GET`,`HEAD`或`DELETE`,则参数将用于构造附加到请求URL的url编码查询字符串。 否则,将根据“ parameterEncoding”属性的值对参数进行编码,并将其设置为请求正文。 + + @param method 请求的HTTP方法,例如“ GET”,“ POST”,“ PUT”或“ DELETE”。 该参数不能为“ nil”。 + @param URLString 用于创建请求URL的URL字符串。 + @param parameters 将被设置为GET请求的查询字符串或请求HTTP正文的参数。 + @param error 构造请求时发生的错误。 + + @return 一个NSMutableURLRequest对象。 + */ +- (nullable NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable id)parameters + error:(NSError * _Nullable __autoreleasing *)error; + +/** + 使用指定的HTTP方法和URLString创建一个“ NSMutableURLRequest”对象,并使用指定的参数和多部分表单数据块构造一个“ multipart / form-data” HTTP正文。参见http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 + + 多部分表单请求会自动进行流传输,直接从磁盘读取文件以及单个HTTP正文中的内存数据。产生的NSMutableURLRequest对象具有HTTPBodyStream属性,因此请不要在此请求对象上设置HTTPBodyStream或HTTPBody,因为它将清除多部分表单主体流。 + + @param method 请求的HTTP方法。此参数不能为“ GET”,“ HEAD”或“ nil”。 + @param URLString 用于创建请求URL的URL字符串。 + @param parameters 在请求HTTP正文中要编码和设置的参数。 + @param block 一个接受单个参数并将数据附加到HTTP正文的块。 block参数是采用AFMultipartFormData协议的对象。 + @param error 构造请求时发生的错误。 + + @return 一个NSMutableURLRequest对象 + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable NSDictionary *)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + error:(NSError * _Nullable __autoreleasing *)error; + +/** + 通过从请求中删除HTTPBodyStream来创建NSMutableURLRequest,并将其内容异步写入指定的文件,并在完成时调用完成处理程序。 + + @param request 多部分表单请求。 request的HTTPBodyStream属性不能为nil。 + @param fileURL 要写入多部分表单内容的文件URL。 + @param handler 要执行的处理程序块。 + + @discussion NSURLSessionTask中存在一个错误,该错误导致请求从HTTP正文流传输内容时请求不发送Content-Length标头,这在与Amazon S3 Web服务进行交互时尤其成问题。解决方法是,此方法采用一个由multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:构造的请求,或带有HTTPBodyStream的任何其他请求,将内容写入指定的文件,并返回原始请求的副本。 HTTPBodyStream属性设置为nil。在这里,文件可以传递到AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`,或将其内容读入分配给请求的HTTPBody属性的NSData中。 + + @see https://github.com/AFNetworking/AFNetworking/issues/1398 + */ +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(nullable void (^)(NSError * _Nullable error))handler; + +@end +``` + +```objc +/** + AFJSONRequestSerializer是AFHTTPRequestSerializer的子类,它使用NSJSONSerialization将参数编码为JSON,将编码请求的Content-Type设置为application / json。 + */ +@interface AFJSONRequestSerializer : AFHTTPRequestSerializer + +/** + 用于从Foundation对象写入请求JSON数据的选项。 有关可能的值,请参见“ NSJSONSerialization”文档部分“ NSJSONWritingOptions”。 默认为0。 + */ +@property (nonatomic, assign) NSJSONWritingOptions writingOptions; + +/** + 创建并返回带有指定读写选项的JSON序列化程序。 + + @param writingOptions 指定的JSON写入选项。 + */ ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; +``` + +```objc +/** +AFPropertyListRequestSerializer是AFHTTPRequestSerializer的子类,它使用NSPropertyListSerializer将参数编码为JSON,并将编码后的请求的Content-Type设置为application / x-plist。 + */ +@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer + +/** + 属性列表格式。 可能的值在“ NSPropertyListFormat”中描述。 + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + @warning`writeOptions`属性当前未使用。 + */ +@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param writeOptions The property list write options. + + @warning The `writeOptions` property is currently unused. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions; + +@end +``` + +```objc +#import "AFURLSessionManager.h" +``` + +``` +AFURLSessionManager基于指定的NSURLSessionConfiguration对象创建和管理NSURLSession对象,该对象符合。 +```