iOS开发 --- AFNetworking 进行封装(POST请求遇到的问题)

前言:

最近在写大量text文本上传功能,再用GET请求就会报404....,所以就要用POST请求了,因为GET请求对URL的长度有限制...

一,POST发送请求有两种形式:

1,发送纯文本的内容

2,发送的body部分带有文件(图片,音频或者二进制数据)

对应的Content - Type有两种:

1,application/x-www-form-urlencoded

2,multipart/form-data

今天主要讲的是POST发送请求的第一种方式:发送纯文本的内容


//发送一个POST请求
- (void)postTest:(NSString *)url
      params:(NSDictionary *)params
     success:(void (^)(id responseObject))success
     failure:(void (^)(NSError *error))failure;

//发送一个POST请求
- (void)postTest:(NSString *)url
          params:(NSDictionary *)params
         success:(void (^)(id responseObject))success
         failure:(void (^)(NSError *error))failure{
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]init];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
    //默认:application/x-www-form-urlencoded
    [manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    
    manager.requestSerializer.timeoutInterval = outTime;
    [manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (success) {
            success(responseObject);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

问题分析:

第1句代码:

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]init];

这样写的话后面第8句代码就要把url写全;

也可以写成

AFHTTPSessionManager *session = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://192.168.1.1/"]];
第2句代码:

manager.requestSerializer = [AFHTTPRequestSerializer serializer];
这句是发送请求的序列化,分3种编码格式:如果是POST方式,就用第一个 AFHTTPRequestSerializer;

1,AFHTTPRequestSerializer:普通的http的编码格式就是mid=10&method=userInfo&dateInt=20160818,这种格式的。

2,AFJSONRequestSerialize:是json编码格式的,也就是编码成:  {"mid":"11","method":"userInfo","dateInt":"20160818"}

3, AFPropertyListRequestSerializer:但是看介绍接编码成pislt格式的参数

第3句代码:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];
这句是接收端的序列化,也有3中方式:

1,AFHTTPResponseSerializer:直接使用服务器应该返回的数据,不做任何解析,我们接收到数据自己做转换;

2,AFXMLParserResponseSerializer:告诉服务器以xml形式返回数据;

3, AFJSONResponseSerializer:以json形式返回数据,默认是该样式;


第5句代码:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

第6句代码:

[manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

第7句代码:

设置请求超时时间;

manager.requestSerializer.timeoutInterval = outTime;
第8句代码:

发送请求

params:

[manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (success) {
            success(responseObject);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];

参考文章:

1,专为新手写的:关于IOS HTTP请求的问题和常报的几个错,AFNetworking版


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值