NSURLSession:获取 401 HTTP 错误
NSURLSession: Getting 401 HTTP error
我收到“401 端点未经授权访问”。当我 运行 在 POSTMAN(Chrome 分机)上进行相同的调用时,它工作正常。即使它在我的 Android 应用程序中也能正常工作。
但是在这里,即使我在 headers 中发送令牌,我也会获得未经授权的访问。我不知道这里出了什么问题。我得到的回复是:
{"detail":"Authentication credentials were not provided."}
这是我的代码:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
NSString *url=[NSString stringWithFormat:@"%@",endpoint];
NSLog(@"url is %@",url);
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSString *token=[NSString stringWithFormat:@"token %@",TOKEN];
NSLog(@"token is %@",token);
[request addValue:token forHTTPHeaderField:@"Authorization"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"requestReply: %@", requestReply);
}] resume];
我哪里做错了什么?
编辑: 如果我使用不同的 class 尝试这种方式,响应为 (null)。
NSMutableURLRequest *request =
[NSMutableURLRequest requestWithURL:[NSURL
URLWithString:url]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:10
];
[request setHTTPMethod: @"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSString *token=[NSString stringWithFormat:@"token %@",[[NSUserDefaults standardUserDefaults]valueForKey:D_KEY_TOKEN]];
[request setValue:token forHTTPHeaderField:@"Authorization"];
NSError *requestError = nil;
NSURLResponse *urlResponse = nil;
[NSURLConnection sendSynchronousRequest:request
returningResponse:&urlResponse error:&requestError];
NSLog(@"url response is %@",urlResponse);
编辑2:
NSString *url=[NSString stringWithFormat:@"%@/",endpoint];
这就是我所做的,只是在它开始工作时在端点末尾附加斜杠 (/)。我想知道为什么最后需要附加斜杠?我的所有其他电话都没有斜线。
尝试在 url 的末尾加上斜杠“/”。
我收到“401 端点未经授权访问”。当我 运行 在 POSTMAN(Chrome 分机)上进行相同的调用时,它工作正常。即使它在我的 Android 应用程序中也能正常工作。
但是在这里,即使我在 headers 中发送令牌,我也会获得未经授权的访问。我不知道这里出了什么问题。我得到的回复是:
{"detail":"Authentication credentials were not provided."}
这是我的代码:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
NSString *url=[NSString stringWithFormat:@"%@",endpoint];
NSLog(@"url is %@",url);
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSString *token=[NSString stringWithFormat:@"token %@",TOKEN];
NSLog(@"token is %@",token);
[request addValue:token forHTTPHeaderField:@"Authorization"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"requestReply: %@", requestReply);
}] resume];
我哪里做错了什么?
编辑: 如果我使用不同的 class 尝试这种方式,响应为 (null)。
NSMutableURLRequest *request =
[NSMutableURLRequest requestWithURL:[NSURL
URLWithString:url]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:10
];
[request setHTTPMethod: @"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSString *token=[NSString stringWithFormat:@"token %@",[[NSUserDefaults standardUserDefaults]valueForKey:D_KEY_TOKEN]];
[request setValue:token forHTTPHeaderField:@"Authorization"];
NSError *requestError = nil;
NSURLResponse *urlResponse = nil;
[NSURLConnection sendSynchronousRequest:request
returningResponse:&urlResponse error:&requestError];
NSLog(@"url response is %@",urlResponse);
编辑2:
NSString *url=[NSString stringWithFormat:@"%@/",endpoint];
这就是我所做的,只是在它开始工作时在端点末尾附加斜杠 (/)。我想知道为什么最后需要附加斜杠?我的所有其他电话都没有斜线。
尝试在 url 的末尾加上斜杠“/”。