ios - cURL 请求有效,但不是等效的 NSURLSession 请求

标签 ios objective-c nsurlsession nsurlrequest

这个 cURL 在控制台上给我一个很好的结果:

curl -H "Accept: application/json" https://myusername:mypassword@somehost.com/someroute

但是这段 iOS 代码生成了 404

NSURL *URL = [NSURL urlWithString:@"https://myusername:mypassword@somehost.com/someroute"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
request.HTTPMethod = @"GET";
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    // here, data is nil, there's no error, but the api returns 404
}] resume];

我知道 iOS 中的传输安全设置,但我认为这些设置仅适用于 http 请求。鉴于 cURL 工作正常,有人可以建议我在 iOS 中可能做错了什么吗?

最佳答案

基本身份验证凭据应附加在 header 中。

swift 3:

let raw = "myusername:mypassword"
let encoded = raw.data(using: String.Encoding.ascii)!
let value = "Basic \(encoded.base64EncodedString())"

ObjC(未测试)

NSString *raw = @"myusername:mypassword";
NSData *encoded = [raw dataUsingEncoding:NSASCIIStringEncoding];
NSString *value = [NSString stringWithFormat:@"Basic %@", [encoded base64EncodedStringWithOptions:0]];
[request setValue:value forHTTPHeaderField:@"Authorization"];

或者,您也可以验证 Authorization header 使用 curl -H "Accept: application/json" -H "authorization: <value>" https://somehost.com/someroute

关于ios - cURL 请求有效,但不是等效的 NSURLSession 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45293412/

相关文章:

objective-c - OpenCV 检测图像上的 Blob

objective-c - cocos2d mac项目全屏模式下警报窗口位于主窗口下方

javascript - 从 Objective-C 调用 javascript 函数的语法

ios - 在移动应用程序中保留 SSL 证书的最佳方式

iPhone 谷歌地理编码请求失败

ios - 如何将接收方的 ACCEPT 和 DECLINE 操作通知发送方?

swift - 防止 NSURLSession 缓存响应

ios - AFNetworking/NSURLSession创建100多个任务下载文件耗时较长

swift - 取消 URLSessionStreamTask 永远不会使用 NSURLErrorCancelled 调用completionHandler(在 macOS 上)

ios - 在 iOS 8 上点击选择框时手机间隙应用程序崩溃