2014-01-23 5 views
1

Я сделал быстрый проект испытания и через это в viewDidLoad:Что я делаю неправильно с NSURLSession, что не позволяет мне POST для этого API?

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:configuration]; 
NSURL *url = [NSURL URLWithString:@"http://www.diffbot.com/api/batch"]; 


NSString *batchJSON = @"[{\"method\":\"GET\",\"relative_url\":\"/api/article?token=...&url=http://www.macrumors.com/2014/01/12/your-verse-ipad-ad/\"}]"; 
NSDictionary *parameters = @{@"token": @"...", 
          @"batch": batchJSON}; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
request.HTTPMethod = @"POST"; 
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

NSError *error; 
NSData *parameterData = [NSJSONSerialization dataWithJSONObject:parameters options:kNilOptions error:&error]; 

request.HTTPBody = parameterData; 

NSURLSessionDataTask *dataTask = [urlSession dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    NSString *dataResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@", dataResponse); 
}]; 

[dataTask resume]; 

Я выкладываю в this API, который является относительно простой, и я могу делать хорошо с примером локона заявлением в этой связи, но не с новым NSURLSession с прошивкой 7.

Я получаю эту ошибку:

{"error":"Not authorized API token.","errorCode":401}

который, безусловно, не так, как я скопировать и вставить ключ API я вхожу в с.

Что я делаю неправильно?

+2

Если маркер правильно, обратитесь www.diffbot.com поддержка – Johnykutty

ответ

2

Имел ту же проблему. Решение, которое работало для меня:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
request.HTTPMethod = @"POST"; 

NSMutableString *requestString = [NSMutableString string]; 
[params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    [requestString appendFormat:@"%@=%@&", key, 
}]; 

[request setHTTPBody:[requestString dataUsingEncoding:NSUTF8StringEncoding]]; 

Вместо:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
request.HTTPMethod = @"POST"; 
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

NSError *error; 
NSData *parameterData = [NSJSONSerialization dataWithJSONObject:parameters options:kNilOptions error:&error]; 

request.HTTPBody = parameterData; 
+0

Так что же изменилось, что сделал эту работу? Было ли это, что вы проходили в вариантах: kNilOptions для NSJSONSerialization? –

0

То, что у вас есть, выглядит правильно. Одна вещь, которую следует попробовать, - объявить токен как часть URL-адреса: [NSURL URLWithString: @ "http://www.diffbot.com/api/batch?token= ...."]. Если это не сработает, я соглашусь с Джоникатти.