ios - 不允许我发布到此 API 的 NSURLSession 我做错了什么?

标签 ios objective-c ios7 nsurlrequest nsurlsession

我做了一个快速测试项目,并在 viewDidLoad 中通过它:

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这相对简单,我可以很好地使用该链接中的示例 curl 语句,但不能使用 iOS 7 中的新 NSURLSession

我收到这个错误:

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

这绝对是错误的,因为我正在复制并粘贴我登录时使用的 API key 。

我做错了什么?

最佳答案

遇到了同样的问题。 对我有用的解决方案:

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;

关于ios - 不允许我发布到此 API 的 NSURLSession 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21299324/

相关文章:

ios - iPhone 中方法调用的 CPU 和内存使用情况

ios - 浮点值介于0和1之间

iphone - 如何以编程方式清除 iPhone 上的浏览​​器缓存?

ios - 将歌曲作为 mp3 从 ipod 音乐库导入应用程序

ios - UISearchBar AutoLayout ios7 错误?

ios - 无法从静态库和包中加载 subview 类和 xib

ios - 在 iOS 上以编程方式添加 UIBarButtonItem 操作

ios - 无需交互即可发送后台短信

uibutton - 当用作左侧或右侧导航栏项目时,具有自定义 View 的 UIBarButtonItem 在 iOS 7 上未正确对齐

ios - 在 KeyChainItemWrapper 中保存密码时崩溃