使用AFNetworking的多部分PUT请求 [英] multipart PUT request using AFNetworking

查看:972
本文介绍了使用AFNetworking的多部分PUT请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在iOS上使用AFNetworking对多部分PUT请求进行编码的正确方法是什么? (仍然是Objective-C,而不是Swift)

What's the correct way to code a multipart PUT request using AFNetworking on iOS? (still Objective-C, not Swift)

我看起来好像AFNetworking可以做多部分 POST 但不是 PUT ,有什么解决方案?

I looked and seems like AFNetworking can do multipart POST but not PUT, what's the solution for that?

谢谢

推荐答案

您可以使用 multipartFormRequestWithMethod 创建包含所需数据的多部分 PUT 请求。

You can use multipartFormRequestWithMethod to create a multipart PUT request with desired data.

例如,在AFNetworking v3.x中:

For example, in AFNetworking v3.x:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

NSError *error;
NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"PUT" URLString:@"http://example.com/rest/api/" parameters:@{@"foo" : @"bar"} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    NSString *value = @"qux";
    NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding];
    [formData appendPartWithFormData:data name:@"baz"];
} error:&error];

NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
    if (error) {
        NSLog(@"%@", error);
        return;
    }

    // if you want to know what the statusCode was

    if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
        NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
        NSLog(@"statusCode: %ld", statusCode);
    }

    NSLog(@"%@", responseObject);
}];
[task resume];






如果是AFNetworking 2.x,你可以使用 AFHTTPRequestOperationManager

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSError *error;
NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"PUT" URLString:@"http://example.com/rest/api/" parameters:@{@"foo" : @"bar"} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    NSString *value = @"qux";
    NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding];
    [formData appendPartWithFormData:data name:@"baz"];
} error:&error];

AFHTTPRequestOperation *operation = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"%@", error);
}];

[manager.operationQueue addOperation:operation];






说明了如何创建这样的请求,值得注意的是服务器可能无法解析它们。值得注意的是,PHP解析多部分 POST 请求,但不解析多部分 PUT 请求。


Having illustrated how one could create such a request, it's worth noting that servers may not be able to parse them. Notably, PHP parses multipart POST requests, but not multipart PUT requests.

这篇关于使用AFNetworking的多部分PUT请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆