【问题标题】:Post method using Afnetworking in Objective-C在 Objective-C 中使用 Afnetworking 的 Post 方法
【发布时间】:2017-01-12 02:20:00
【问题描述】:

如何使用 Afnetworking 编写代码以发送以下 JSON 格式的 POST 方法。

{
Media
  {
      Photo : image.jpg, 
      UserId : 2
  },
Personal
  {
      Name : aaa, 
      Age   : 30
  }, 
Education
  {
    College : xxx, 
    Course : yyy    

  }, 
} 

【问题讨论】:

  • 你的代码在哪里?请参阅How to Ask。您甚至都懒得上 2 分钟的网站 tour

标签: objective-c json afnetworking


【解决方案1】:

显然这不是真正的格式,但我们可以猜到您的意思。显然,如果这些数值(用户 id 和年龄)预期为字符串,则引用然后,但希望它说明该字典的 Objective-C 表示可能是什么样子:

NSDictionary *parameters = @{@"Media": @{@"Photo": @"image.jpg", @"UserId": @2}, @"Personal": @{@"Name": @"aaa", @"Age": @30}, @"Education": @{@"College": @"xxx", @"Course": @"yyy" }};

然后您可以像这样将其发布为 JSON:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];

[manager POST:@"https://yoururl.com" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSLog(@"responseObject = %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"error %@", error);
}];

如果您的服务器不支持 HTTPS,而只支持 HTTP,那么您可能需要将 Info.plist 的“应用程序传输安全设置”更改为“允许任意加载”。

【讨论】:

  • 谢谢 Rob,如何发送 "image.jpg" ,是否需要像这样转换 formdata,AFHTTPRequestOperationManager *requestManager; [requestManager POST:KAPIUploadOutfit 参数:params constructionBodyWithBlock:^(id formData) { [formData appendPartWithFileURL:fileURL name:@"photo_url" fileName:filename mimeType:@"image/png" error:nil]; }
  • 当然,但这不是 JSON,你说你想使用它。这是一个multipart/form-data 请求。这是发送文件和发送表单值(即键/名称和值对)的好方法,但不适用于发送结构化的 JSON(或者至少没有像将 JSON 放入 multipart/form-data 请求那样的愚蠢)。因此,您有一个选择:使用multipart/form-data 并简化请求其余部分的结构,或者使用 JSON,但是您必须将图像转换为 JSON 中的某些文本表示(例如 base-64 编码),这你必须在服务器端解码..
  • 感谢罗伯的回答。
【解决方案2】:

首先制作一个你要发送的参数字典

NSDictionary *params = @{
                                     @"contact_no":@"9898989898",
                                     @"password":@"••••••••••"
                                     };

然后编写如下代码

AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager];
    operationManager.requestSerializer = [AFJSONRequestSerializer serializer];
    operationManager.responseSerializer = [AFJSONResponseSerializer serializer];
operationManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
        [operationManager POST:urlString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject){
            NSLog(@"%@",responseObject);

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

你可以忽略我设置acceptableContentTypes的那一行。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多