2

我正在构建我的第一个 iOS 应用程序。

我已经完成了后端代码,但我正在努力处理其中的 Objective-C 部分。

我有一个注册/登录页面。

但我不知道如何使用 Objective C 将该数据发送到我的服务器。

我读过 AFNetworking 很好,但我想知道如何将它用于用户登录。

我已将 AFNetworking 下载并添加到我的 XCode 项目并设置标题。

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com]];

[client setDefaultHeader:@"key" value:@"value"];
[client setAuthorizationHeaderWithUsername:@"username" password:@"password"];
[client setAuthorizationHeaderWithToken:@"token"];

NSURLRequest *request = [client requestWithMethod:@"someMethod" path:@"somePath" parameters:nil];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

但我还是迷路了。

4

3 回答 3

2

由于您尝试登录自己的 API,因此您不需要 setAuthorization 的东西。这是基本的 HTTP 身份验证。相反,您想使用getPath:parameters:success:failure或 postPath 版本,具体取决于您的后端是期待 HTTP GET 还是 HTTP POST。

在参数参数中传递您的用户名/密码。您应该将parameterEncoding设置为正确的格式。您可能正在使用 HTTP 表单 url 编码或 JSON。无论您的后端期望什么。

于 2013-02-16T20:26:18.843 回答
0

由于我是在为AFNetworking 2.0寻找可行的解决方案时来到这里的,但不知道该解决方案AFHTTPClient已从框架中删除,因此我将在此处发布建立此连接的新方法:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com"]];
[manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"userName" password:@"password"];
于 2014-03-14T10:43:12.993 回答
0

在这种情况下,您不想设置授权标头,因为这是用于“基本访问 HTTP 身份验证”,这是 HTTP 用户代理在向服务器发出请求时提供用户名和密码的一种方法。

您想使用自己的 API 并与 restful 服务器交互,因此,我建议您将AFHTTPClient 子类化 -> 与 API、Web 服务或应用程序交互。-如果您在继承 AFHTTPClient 时遇到困难,请查看 AFNetworking zip 存档中的示例。

由于你想创建一个用户登录的应用程序,应用程序需要将这些信息发送到你的服务器,如果登录成功与否,服务器应该返回。这可以像这样完成 - HTTP POST。

 - (void)login {

    // Login information from UITextFields
    id params = @{
        @"username": self.usernameField.text,
        @"password": self.passwordField.text
    };

    //Call the AFHTTP subclass client, with post block. postPath = the path of the url,   where the parameters should be posted. 
    [[theAuthAPIClient sharedClient] postPath:@"/login"
                                parameters:params
                                   success:^(AFHTTPRequestOperation *operation, id responseObject) {

                                       //handle succesful response from server. 

                                   } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                       // handle error - login failed
                                       }
                                   }];

}

您需要以正确的格式传递参数,具体取决于您的服务器期望的格式。这可以通过在 AFHTTPClient 子类 -> ParameterEncoding中设置正确的编码来完成

于 2013-02-16T21:17:28.537 回答