自定义支持数组的表单网络请求
来源:互联网 发布:isight8.0软件下载 编辑:程序博客网 时间:2024/05/16 11:16
封装AFN的方法,默认不支持数组的表单请求
1.把数组从字典中拿出来
2.把数组内容转换为NSData添加到表单数据当中
+(void)postFormJava:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure{
url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSMutableDictionary *mdict = [NSMutableDictionary dictionaryWithDictionary:params];
NSMutableDictionary *mArrayDict = [NSMutableDictionary dictionaryWithCapacity:4];
for (NSString *key in params.allKeys) {
id value = mdict[key];
if ([value isKindOfClass:[NSArray class]]) {
[mArrayDict setObject:value forKey:key];
[mdict removeObjectForKey:key];
}
}
params = mdict;
// 1.获得请求管理者
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
//设置超时的秒数
mgr.requestSerializer.timeoutInterval = 30;
[mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
for (NSString *key in mArrayDict) {
NSArray *values = mArrayDict[key];
for (NSNumber *value in values) {
NSString *valString = [value stringValue];
NSData *data = [[NSData alloc] initWithBytes:[valString UTF8String] length:valString.length];
[formData appendPartWithFormData:data name:key];
}
}
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *dict;
if ([responseObject isKindOfClass:[NSDictionary class]])
{dict = [responseObject copy];
}
else{
dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
}
success(dict);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(error);
}];
}
请求框架字典转表单部分:
- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(NSDictionary *)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
error:(NSError *__autoreleasing *)error
{
NSParameterAssert(method);
NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]);
NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error];
__block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding];
if (parameters) {
for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) {
NSData *data = nil;
if ([pair.value isKindOfClass:[NSData class]]) {
data = pair.value;
} else if ([pair.value isEqual:[NSNull null]]) {
data = [NSData data];
} else {
data = [[pair.value description] dataUsingEncoding:self.stringEncoding];
}
if (data) {
[formData appendPartWithFormData:data name:[pair.field description]];
}
}
}
if (block) {
block(formData);
}
return [formData requestByFinalizingMultipartFormData];
}
阅读全文
0 0
- 自定义支持数组的表单网络请求
- 自定义UI 网络 请求类的封装
- 自定义网络请求图片的大小
- 自定义view的viewpager(网络请求图片)
- 创建完全支持dojox.form.manager的自定义表单控件
- 自定义网络请求引擎
- 自定义网络请求
- 自定义轮播图+网络请求
- Android支持单词提示搜索框的网络请求策略
- 表单的ajax请求
- 自定义带网络请求的UITableView中tableHeaderView视图
- Volley实现自定义的网络请求Implementing a Custom Request
- ios自定义异步post网络请求的封装
- 自定义ProgressStateLayout实现网络请求状态间的相互切换
- Android 网络请求的图片用自定义圆形View展示
- Redis自定义类(支持字符串,数组,对象的存取)
- 网络请求工具类之OkHttp3封装(二)上(支持请求取消、异步请求的线程切换)
- 网络请求工具类之OkHttp3封装(二)下(支持请求取消、异步请求的线程切换)
- Python学习-Python数据类型
- java 基础之--java的反射机制
- android 微信分享后走ondestroy()用android:configChanges属性解决
- 一些简单js基础问题记录(长期更新)
- MongoDB group 使用 $first 获取指定字段
- 自定义支持数组的表单网络请求
- 第二章 作业 汉字你、我、他在unicode表中的位置。
- Struts2 文件的上传和下载
- NSDecimalNumber使用
- 使用H5实现机器人脸
- 分数转小数(模拟)
- vue中需要注意的一些杂项
- 【LeetCode】423. Reconstruct Original Digits from English(Python实现)
- PHPEXCEL 导出数据加图片