nsurlsession请求httpbody在自定义nsurlprotocol中零



在我的应用程序中,我正在使用nsurlsession进行帖子。

遵循的步骤:

  1. 设置标头
  2. 设置httpbody
  3. 使用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示例代码项目的读数文件(。

最新更新