使用 AFNetworking 的基本身份验证

Posted

技术标签:

【中文标题】使用 AFNetworking 的基本身份验证【英文标题】:Basic authentication using AFNetworking 【发布时间】:2015-07-25 03:30:41 【问题描述】:

我是 ios 开发新手,如何在 Objective-C 中使用 AFNetworking 进行 HTTP 基本身份验证?

怎么用?

- (Void) setAuthorizationHeaderWithUsername: (NSString *) username password: (NSString *) password

【问题讨论】:

【参考方案1】:

当您需要添加标头或扩展它时,您应该创建自己的 AFHTTPClient 实例。您可以将 sharedInstance 创建为单例,然后调用实例方法设置用户名和密码。

+ (AFHTTPClient *)sharedClient
    static AFHTTPClient *_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^
            _sharedClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"your_server_url"]];
        [_sharedClient setAuthorizationHeaderWithUsername:@"username" password:@"password"];
    );

    return _sharedClient;

【讨论】:

【参考方案2】:

感谢您的帮助,但失败了。

您正在返回以下错误:

Request failed: unacceptable content-type: text/html
NSLocalizedDescription = Request failed: unacceptable content-type: text/html.

我相信服务器正在返回 text/html 并且代码需要 JSON。

【讨论】:

【参考方案3】:

您可以使用 AFN 来处理您的大部分网络请求。希望对您有所帮助。

- (Void) setAuthorizationHeaderWithUsername: (NSString *) username password: (NSString *) password 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    //a NSDictionary parameter
    NSDictionary *parameters = @@"name": username, @"pwd": password;
    [manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
    //you can get JSON response in responseObject whether your request or wrong.
    NSLog(@"JSON: %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

【讨论】:

不会在 URL 中以纯文本形式包含用户名和密码吗?绝对不是好习惯 这是一个 NSDictionary。 "name" &"pwd" 是您网站的必需字符串。用户名当然是字符串,你设置你的注册名和密码。当您使用 AFNetworking 时,没有人会在 url 中看到用户名和密码。 POST 数据不会在 URL 中发送,这与 AFNetworking 无关。但除非您使用 https,否则它会在正文中以纯文本形式发送。 感谢您的帮助,但失败了。您返回以下错误:“请求失败:不可接受的内容类型:文本/html NSLocalizedDescription = 请求失败:不可接受的内容类型:文本/html”。我相信服务器以 text/html 的形式返回,并且代码需要 JSON。

以上是关于使用 AFNetworking 的基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2 使用 AFHTTPRequestOperation 进行身份验证

带有凭据的 AFNetworking 上传任务(HTTP 基本身份验证)

AFNetworking 2.0:凭据未在前一次请求的 30 秒内发送到身份验证

AFNetworking 的摘要访问身份验证 [关闭]

如何在 AFNetworking 2 中使用 POST + 参数下载经过身份验证的文件?

AFNetworking 和身份验证令牌错误代码 -1011