Ios NSURLConnection授权标头不工作
我试图通过NSURLConnection在HTTP头中发送OAuth访问令牌,但它似乎没有发送头,因为API不断给我一个错误,说“必须提供授权令牌” 这是我正在使用的代码:Ios NSURLConnection授权标头不工作,ios,curl,http-headers,nsurlconnection,get-request,Ios,Curl,Http Headers,Nsurlconnection,Get Request,我试图通过NSURLConnection在HTTP头中发送OAuth访问令牌,但它似乎没有发送头,因为API不断给我一个错误,说“必须提供授权令牌” 这是我正在使用的代码: NSURL *aUrl = [NSURL URLWithString: @"http://generericfakeapi.com/user/profile"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
NSURL *aUrl = [NSURL URLWithString: @"http://generericfakeapi.com/user/profile"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:30.0];
[request addValue:[NSString stringWithFormat:@"OAuth %@", token] forHTTPHeaderField:@"Authorization"];
[request setHTTPMethod:@"GET"];
NSError *error = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error: &error];
NSDictionary *JSONDictionary = [NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error];
NSLog(@"Response : %@", JSONDictionary);
这是API的cURL命令的一个示例:
curl 'http://generericfakeapi.com/user/profile' -H 'Authorization: OAuth YourAuthToken'
这不是我通过NSURLConnection所做的吗
任何帮助都将不胜感激。对我来说,这看起来很好。您确定您提供了有效的令牌吗? 试着像这样捕捉错误
if (error) {
NSLog(@"error : %@", error.description);
}
我的代码运行良好:
NSURL *jsonURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://....ID=%i", cellID]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:jsonURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0];
[request setValue:@"Basic ...." forHTTPHeaderField:@"Authorization"];
NSURLResponse *response;
NSError * error = nil;
NSData *POSTReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
希望它有助于改变这一行:
NSURL *aUrl = [NSURL URLWithString: @"http://generericfakeapi.com/user/profile"];
致:
显然,如果URL末尾没有斜杠,iOS会删除授权标头。这个问题几乎让我失去了两天的睡眠。我也有同样的问题。就我而言,我将“http”改为“https”,一切正常@isair的答案真是救命稻草 如果您感兴趣,只需添加根本原因: NSURLRequest定义了一组。令人惊讶的是,
authorization
是其中的一部分
URL加载系统为您处理HTTP协议的各个方面(HTTP 1.1持久连接、代理、身份验证等)。作为此支持的一部分,URL加载系统负责某些HTTP头:
- 内容长度
- 授权书
- 联系
- 主人
- 代理验证
- 代理授权
- WWW认证
授权
头与后端Django服务器进行身份验证。该应用程序在桌面Chrome上表现完美,但由于缺少授权
标题,始终无法访问iPhone(Safari和Chrome)上所需的登录
API
理想的解决方案是完全避免使用
授权
。但是如果您正在与一个专门需要它的后端框架通信(例如Django Rest框架的令牌身份验证)@isair的答案是一个很好的解决办法。+1是最简单的解决方案。同样的问题困扰着我,幸运的是,我没有失眠。然而,我试图寻找更多的信息,不幸的是没有人有明确的解释。知道为什么(直到什么时候:)会很有帮助。非常感谢,我刚刚遇到了同样的问题。iOS似乎把斜杠结尾的url和非斜杠结尾的url分为两种情况。你救了我一天,我在上面花了4个关键小时,如果找到了你的答案,谢谢你,甚至不知道在尝试不同的事情上浪费了多少时间!-我花了4个小时调试这个问题。
NSURL *aUrl = [NSURL URLWithString: @"http://generericfakeapi.com/user/profile/"];