【发布时间】:2017-05-30 12:01:42
【问题描述】:
在我的应用程序中,我正在使用 NSURLSession 执行 POST。
后续步骤:
- 设置标题
- 设置 HTTPBody
- 使用 NSURLSession 发出 POST 请求。
代码是:
NSDictionary *parameters = @{ @"searchTerm": @"shampoo", @"sort": @"Most Reviewed" };
NSError *error = nil;
NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"SomeURL"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];
request.HTTPBody = postData;
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSLog(@"Pass");
}
}];
[dataTask resume];
现在在自定义 NSURLProtocol 类中:
(BOOL)canInitWithRequest:(NSURLRequest *)request {
if ([request.HTTPMethod isEqualToString:@"POST"]) {
//here request.HTTPMethod is coming nil
//Whereas my requirement is to get request.HTTPMethod which got request parameter.
return YES;
}
return NO;
}
提前致谢。
【问题讨论】:
-
*request.HTTPBody
-
简短回答:当您使用协议时,数据对象已被转换为流,您必须从中读取。
-
解决方案是我们必须执行 [self.request.HTTPBodyStream open];然后尝试访问它。
标签: nsurlsession nsurlprotocol