我构建了一个简单的 Django 应用程序,并使用 Django REST Framework 公开了一些 API 端点。我现在使用基本身份验证。我已经在命令行上进行了测试,一切正常:
curl -H 'Accept: application/json; indent=4' -u myuser:mypass http://myapp.herokuapp.com/items/
我正在将 API 交给 iOS 开发人员。在 iOS 应用程序中调用以正确验证和传递 JSON 数据的正确参数是什么?我真的不熟悉iOS开发,所以我不知道如何解决这个问题。
当您使用“curl”并使用“-u myuser:mypass”时,您将在 HTTP 授权标头中发送用户名和密码。我不确定如何在 IOS 中具体执行此操作,但我会尝试使用如下网址执行 POST 请求:http://username:[email protected]/
只需向开发人员提供 API URL、用户名和密码,并告诉他进行基本身份验证,他就会知道该怎么做。
如果他不知道该怎么做,你可以把他指向这个线程:NSURLConnection and Basic HTTP Authentication in iOS
关于JSON,我想你可以要求iOS开发者添加到请求头
'Accept: application/json;'
那就应该没问题了。
我们的 IOS 开发人员实际上使用了稍微不同的实现,为了完整性,我发布了他的代码。
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"GET"];
[request addRequestHeader:@"Authorization" value:[NSString stringWithFornat:@"Basic %@", [ASIHTTPRequest base64forData:[[NSString stringWithFormat:@"%@:%@",username,password] dataUsingEncoding:NSUTF8StringEncoding]]]];
[request setDidFinishSelector:@selector(requestFinished:)];
[request start];
我是这样解决认证问题的。
let authStr:NSString = "username:password"
let authData:NSData = authStr.dataUsingEncoding(NSASCIIStringEncoding)!
let authValue:NSString = "Basic \(authData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength))"
request.setValue(authValue, forHTTPHeaderField: "Authorization")