我做了一个快速测试项目,并在 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/