【问题标题】:Set HTTP Body to AFNetworking instead of using native request将 HTTP 正文设置为 AFNetworking 而不是使用本机请求
【发布时间】:2016-04-27 08:14:37
【问题描述】:

我最近一直在尝试让 AFNetworking 像处理本机请求一样工作,我一直使用 AFNetworking 上传 POST 或 GET。但它从未正确上传我的图像。它总是上传到损坏的服务器,我已经在这个参考中解释了这个问题:Uploading image to server reached damaged using AFNetworking

我已尝试将本机 NSURLConnection.sendSynchronousRequest 与 HTTP 正文一起使用,它已上传且未损坏。并且这段代码完全可以工作,但我在 AFNetworking 中需要它,因为它只支持 IOS 8 + 以及更多原因。

        let baseURL = ""
        let selectedImage = self.userImage.image
        let imageData = NSData(data: UIImageJPEGRepresentation(selectedImage!, 0.5)!)

        let request = NSMutableURLRequest()
        request.URL = NSURL(string: baseURL)
        request.HTTPMethod = "POST"
        request.addValue("image/jpeg", forHTTPHeaderField: "Content-Type")
        let body = NSMutableData(data: imageData)
        request.HTTPBody = body

 do {
            let responseData = try NSURLConnection.sendSynchronousRequest(request, returningResponse:nil)
            let responseString = String(data: responseData, encoding: NSUTF8StringEncoding)

            print("User image successfully uploaded navigating to home services")


        } catch (let error as NSError) {
}

【问题讨论】:

  • 顺便说一句,如果你的项目是 Swift,你或许应该使用 AlamoFire 而不是 AFNetworking(来源:这个 SO 答案stackoverflow.com/a/32988602/433373
  • 它做同样的工作,我只需要发送 HTTP 正文和库无关紧要。

标签: ios swift http afnetworking


【解决方案1】:
     NSMutableDictionary *contentDictionary = [[NSMutableDictionary alloc]init];
    [contentDictionary setValue:@"name" forKey:@"email"];
    [contentDictionary setValue:@"name" forKey:@"username"];
    [contentDictionary setValue:@"name" forKey:@"password"];
   [contentDictionary setValue:@"name" forKey:@"firstName"];
    [contentDictionary setValue:@"name" forKey:@"lastName"];

    NSData *data = [NSJSONSerialization dataWithJSONObject:contentDictionary options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonStr = [[NSString alloc] initWithData:data
                                          encoding:NSUTF8StringEncoding];
NSLog(@"%@",jsonStr);

NSString *urlString = [NSString stringWithFormat:@"http://testgcride.com:8081/v1/users"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
   [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:[jsonStr dataUsingEncoding:NSUTF8StringEncoding]];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"moinsam" password:@"cheese"];
manager.requestSerializer = [AFJSONRequestSerializer serializer];

AFHTTPRequestOperation *operation = [manager    HTTPRequestOperationWithRequest:request success:<block> failure:<block>];

试试这个

【讨论】:

    【解决方案2】:

    以下是 Objective-c 中的一个解决方案,也可以为 swift 复制相同的过程。 为AFHTTPRequestOperationManager 创建一个对象,如下所示。

     [[AFHTTPRequestOperationManager alloc] initWithBaseURL:@"www.google.com"];
    

    现在用键值对定义NSDictionary,这将是您的请求正文的参数。

    NSDictionary *parameters = @{
                                 @"paramaname": value,
                                 @"paramaname":value
                            };
    

    现在,当调用POST请求时

     [self.manager POST:@"someMethodName" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSDictionary * responseDict = (NSDictionary *)responseObject;
        NSLog(@"responseDict : %@",responseDict);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error  : %@ code %d",error.localizedDescription,error.code);
        }
    }];
    

    这是您可以使用 AFNetworking 发送带有参数的 POST 请求的方法。

    【讨论】:

    • 我没有问如何使用 AFNetworking 发送 post 请求,我问的是如何在 AFNetworking 中设置 http 正文请求...
    • 您设置的字典参数是您请求的正文。希望你能理解
    • NSURLConnection.sendSynchronousRequest 效果很好,但我可以像 AFNetworking 中的 HTTPBody 一样设置吗?字典不像 HTTPBody 那样工作!要么使您的代码有用,要么将其删除,因为它没有任何新功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多