在我的应用程序中,我正在使用nsurlsession进行帖子。
遵循的步骤:
- 设置标头
- 设置httpbody
- 使用nsurlsession提出发布请求。
代码是:
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;
}
预先感谢。
iirc,主体数据对象在到达您之前,通过URL加载系统将透明的转换为流式体。如果您需要阅读数据:打开httpbodystream对象从中读取身体数据有一个警告:流可能不可恢复,因此请勿将该请求对象传递给其他任何需要访问车身的代码。不幸的是,要么没有要求新的车身流的机制(有关其他限制,请参见Apple网站上的自定义HHTTPPROTOCOL示例代码项目的读数文件(。