AFNetworking 2.0 / AFHTTPRequestOperation application / x-www-form-urlencoded

时间:2014-04-05 20:56:44

标签: ios iphone http-headers afnetworking-2 afhttprequestoperation

过去两个项目使用AFNetworking 2.0进行中型项目取得了巨大成功。

这一个电话,但发布用户'登录信息,继续对我失败(服务器说明登录密码和密码不正确,登录是电子邮件,我们在服务器上检查,并且我尝试发送的值相同)

服务器开发人员不处理iOS / ObjC(java / mongoDB人),我给出的是一个URL以及我需要传递的参数Content-Type = application / x-www-form-url -encoded

我在某处读到像@(在电子邮件中)这样的字符可能会导致问题

有没有比我更多经验的人能参与其中吗?我的操作创建方法如下,任何帮助都是值得赞赏的。

-(AFHTTPRequestOperation *)loginUserWithParameters:(NSDictionary *)loginParameters
{
    /*
         parameters dictionary:
         email
         psw
         deviceToken
     */

    NSString *url=SERVER_USER_LOGIN;

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:url]];
    //    [httpClient setParameterEncoding:AFFormURLParameterEncoding];

    NSMutableURLRequest *request=[httpClient requestWithMethod:@"POST" path:nil parameters:nil];


    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:loginParameters options:kNilOptions error:nil];


    [request setHTTPBody:jsonData];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

    [AFNetworkActivityIndicatorManager sharedManager].enabled=YES;

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

    [httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];

    return operation;
}

1 个答案:

答案 0 :(得分:2)

实际上你用你的代码说你会将url编码的数据发送到你的服务器,但你用自定义数据覆盖了你的请求的postBody。所以你应该用:

创建你的请求
NSMutableURLRequest *request=[httpClient requestWithMethod:@"POST" path:nil parameters:loginParameters];

你应该删除以下行:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:loginParameters options:kNilOptions error:nil];
[request setHTTPBody:jsonData];

我认为上述变化就足够了。