ios - 带有 HTTP 身份验证的 NSURLRequest

标签 ios objective-c http rest

我正在尝试使用来自 iPhone 应用程序的 NSURLRequest 对 HTTP RESTful 站点进行身份验证。我将 user/pass 编码为 base64,并将其作为 NSURLRequest 中的“Authorization” header 传入,并附加了“Basic”一词。但是,我在另一端不断收到身份验证错误。这是我的代码。如果我执行手动 CURL 请求,它会起作用。我还检查以确保 Base64 编码正确并且用户、密码和 url 正确。

NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", user, pass];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)];
authValue = [authValue stringByReplacingOccurrencesOfString:@"\n" withString:@""];
[urlRequest setValue:authValue forHTTPHeaderField:@"Authorization"];
[urlRequest setHTTPMethod: @"GET"];
NSData *httpData = [self encodeDictionary:data];
[urlRequest setHTTPBody:httpData];
NSHTTPURLResponse *response;
NSError *error;
NSData* result = [NSURLConnection sendSynchronousRequest:urlRequest  returningResponse:&response error:&error];

最佳答案

授权代码看起来不错。当然,stringByReplacingOccurrencesOfString是不必要的,但不会造成伤害。我可能会使用原生的base64方法(NSData方法base64EncodedDataWithOptionsbase64EncodedStringWithOptions在iOS 7中,base64Encoding在iOS 7之前的版本中)而不是AFNetworking的,但我认为这也不是问题。

假设您的用户名和密码正确,并且您的服务器确实正在使用基本身份验证(如果您的 cURL 成功,我认为这是正确的),这里唯一明显不正确的是对 setHTTPBody 的调用对于 GET要求。 NSURLConnection不会发送 GET 的正文请求(也不应该,因为正文在 GET 请求中在语义上没有意义)。如果你想发送带有body的请求,一般应该使用 POST .或者如果您想在 GET 中发送参数请求时,您可以将它们添加到 URL,但不能添加到正文。

关于ios - 带有 HTTP 身份验证的 NSURLRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623407/

相关文章:

php - Wget 自定义文件名

iPhone dSYM 崩溃日志符号

ios - 在 CAKeyframeAnimation 之后定位 UIView 会导致显示故障

objective-c - 为什么 (int)[ @"-1"floatValue] 不返回 -1

ios - 获取当前 UIWebVIew 元素

java - 骡子 ESB : java component serving zip file but unable to unzip

ios - 如何为 iOS Mobile SDK 生成许可证 key

ios - 更改模拟矩阵会破坏 xcode 中的布局

ios - 在 iOS 中使用 Parse 时自动注销功能

c++ - boost asio read_until 文件异常结尾?