"Request failed: unauthorized (401)" error with REST API/AFNetworking

manager.requestSerializer,
我先设置,再初始化。
悲剧了。

感谢stackOverFlow


I am getting "Request failed: unauthorized (401)" with the below code:

    NSURL *URL = [NSURL URLWithString:@"https://api.parse.com/1/"];
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager manager]initWithBaseURL:URL];;
    [manager.requestSerializer setValue:@"<Application Id>" forHTTPHeaderField:@"X-Parse-Application-Id"];
    [manager.requestSerializer setValue:@"<API Key>" forHTTPHeaderField:@"X-Parse-REST-API-Key"];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];


    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    NSDictionary *parameters = @{@"id": @"user123", @"password": @"password123"};

    [manager POST:@"users" parameters:parameters success:^(NSURLSessionDataTask *operation, id responseObject) {
        NSLog(@"Response: %@", responseObject);

    } failure:^(NSURLSessionDataTask *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

Am I doing something wrong? Any help is appreciated.Thanks.

答案:

(posting again as answer so that working code will appear in code block)

My bad... I am setting the header values before setting up the request serializer. When I set the request serializer, it is discarding previously set headers. In the absence of headers, Parse is throwing 401 error.

Here is the corrected code that is working:

NSURL *URL = [NSURL URLWithString:@"https://api.parse.com/1/"];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager manager]initWithBaseURL:URL];

manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

[manager.requestSerializer setValue:@"<Application Id>" forHTTPHeaderField:@"X-Parse-Application-Id"];
[manager.requestSerializer setValue:@"<API Key>" forHTTPHeaderField:@"X-Parse-REST-API-Key"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

NSDictionary *parameters = @{@"id": @"user123", @"password": @"password123"};

[manager POST:@"users" parameters:parameters success:^(NSURLSessionDataTask *operation, id responseObject) {
    NSLog(@"Response: %@", responseObject);

} failure:^(NSURLSessionDataTask *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,932评论 0 23
  • 老师讲课的声音一下子吸引了我,清晰,有穿透力,让人感觉很青春,阳光向上,又感觉老师有一种干练的气质,很喜欢听老师的...
    刘素霞阅读 619评论 0 0
  • 因为媒体的报道,一线城市的相亲角愈加热闹,也迎来了越来越多局外人的“光顾”。 最近一期的《透明人》,《奇葩说》无冕...
    翟桃子阅读 1,599评论 12 19
  • 今年的中秋节,还下着小雨,江汉路和往常一样人来人往,都打着伞,五颜六色的。我自己拉起了衣服上的连衣帽扣在了头上。 ...
    Ln_8194阅读 312评论 1 0
  • 这个秋天,好像从立秋之后就开始了,天变高了,天空变蓝了,云朵像洁白的棉花,一大团一大团飘浮在天上。 骑车出门,风变...
    雨晴天空阅读 418评论 3 15