OGeek|极客世界-中国程序员成长平台

标题: ios - 如何使用 AFNetworking 将数据发布到 Parse.com [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 08:53
标题: ios - 如何使用 AFNetworking 将数据发布到 Parse.com

我在使用 AFNetworking 和 Parse.com 时遇到问题。我正在尝试将数据发布到数据库,但没有运气。我对网络的东西不太熟悉,所以我把它当作一个学习练习。

我已经让 GET 命令工作了,所以我知道数据库设置正确并且可以正常工作,但是 POST 是另一回事。我正在使用 AFNetworking 2.2.0将一个简单的测试字符串发布到解析后端。

这是我为 GET 命令工作的代码:

-(void)getParseData{

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[manager.requestSerializer setValue:kSDFParseAPIApplicationId forHTTPHeaderField"X-Parse-Application-Id"];
[manager.requestSerializer setValue:kSDFParseAPIKey forHTTPHeaderField"X-Parse-REST-API-Key"];
[manager.requestSerializer setValue"application/json" forHTTPHeaderField"Content-Type"];

[manager GET"https://api.parse.com/1/classes/some_data/" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

}

这是迄今为止我为 POST 命令提供的代码,但它不起作用:

-(void)postParseData{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[manager.requestSerializer setValue:kSDFParseAPIApplicationId forHTTPHeaderField"X-Parse-Application-Id"];
[manager.requestSerializer setValue:kSDFParseAPIKey forHTTPHeaderField"X-Parse-REST-API-Key"];
[manager.requestSerializer setValue"application/json" forHTTPHeaderField"Content-Type"];

manager.responseSerializer = [[AFJSONResponseSerializer serializer]init];

NSDictionary *params = @{@"test_string" : @"NameTest"};

[manager POST"https://api.parse.com/1/classes/warm_data/" parameters: params  success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"OST data JSON returned: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
}

我知道有一个用于 iOS 的自定义 parse.com API 用于此目的,但我想使用 AFNetworking 来了解更多信息并进行改进。我尝试了我在网上找到的几种不同的东西,特别是堆栈溢出,但注意到产生了结果。以下是 AFHTTPRequestOperation 失败 block 返回的错误消息:

 2014-03-24 11:42:07.894 testApp[3222:60b] Error: Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: bad request (400)" UserInfo=0xfe0f400 {NSErrorFailingURLKey=https://api.parse.com/1/classes/some_data/, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x14780070> { URL: api.parse.com/1/classes/some_data/ } { status code: 400, headers {
    "Access-Control-Allow-Origin" = "*";
    "Access-Control-Request-Method" = "*";
    "Cache-Control" = "no-cache";
    Connection = "keep-alive";
    "Content-Length" = 130;
    "Content-Type" = "application/json; charset=utf-8";
    Date = "Mon, 24 Mar 2014 11:42:07 GMT";
    Server = "nginx/1.4.2";
    "Set-Cookie" = "_parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlYWQyNmFhMTA3ZTJkZjljYjA3MjZkZTA1MGQzNWIzNGE%3D--f7812e190b5812d8bba91aea2b12d51412bf84ce; domain=.parse.com; path=/; expires=Wed, 23-Apr-2014 11:42:07 GMT; secure; HttpOnly";
    Status = "400 Bad Request";
    "X-Runtime" = "0.049574";
    "X-UA-Compatible" = "IE=Edge,chrome=1";
} }, NSLocalizedDescription=Request failed: bad request (400)}

我们不胜感激。如果我忘记了任何事情或遗漏了解决问题所需的内容,请告诉我,我会尽我所能补充。



Best Answer-推荐答案


在尝试了有用的评论者的建议并阅读了更多内容并尝试了一些东西之后,我得到了 AFNetworking 的 POST 工作!工作代码如下:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

manager.requestSerializer = [AFJSONRequestSerializer serializer];

[manager.requestSerializer setValue:kSDFParseAPIApplicationId forHTTPHeaderField:@"X-Parse-Application-Id"];
[manager.requestSerializer setValue:kSDFParseAPIKey forHTTPHeaderField:@"X-Parse-REST-API-Key"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

NSDictionary *dic2 = @{@"test_number": @1234};

[manager POST:@"https://api.parse.com/1/classes/warm_data" parameters: dic2
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSLog(@"OST data JSON returned: %@", responseObject);
      }
      failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          NSLog(@"Error: %@", error);
      }
 ]; 

这与之前的代码相同,但很奇怪。我正在查看 AFNetworking docs和其他关于 AFnetworking 的帖子,包括一些 StackOverflow questions here并遇到了

.securityPolicy.allowInvalidCertificates = YES;

AFHTTPRequestOperationManager 的一部分。我在经理声明下方添加了这一行:

manager.securityPolicy.allowInvalidCertificates = YES;

突然间它开始工作了!然后我将 manager.securityPolicy.allowInvalidCertificates 设置为 NO 并且它仍然有效?!?!然后我删除了完整的行,它继续工作,为我发布东西到 Parse。很奇怪。我没有解释这是如何修复它的,也许它在证书被删除时强制解析服务器允许它,我也不知道。我很想知道发生了什么变化,但现在我将继续构建应用程序的其余部分。如果有人有任何理论,我很想听听他们!

再次感谢所有花时间提出建议的评论者,我很感激。

关于ios - 如何使用 AFNetworking 将数据发布到 Parse.com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22608927/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4