oc原生方法请求
1.oc原生请求
/*
使用NSURLSession 进行网络请求的几个步骤
1.构造NSURL地址
2.构造请求对象 NSURLRequest
3.构造NSURLSessionConfiguration配置文件,可选
4.构造NSURLSession网络会话对象
5.创建网络任务
6.执行网络任务,发送网络请求
*/
NSString *boundary = @"_YJAYgDL082HLBJkC1laRbpjU5PlLgeJh_";//放入协议头中随机生成的字符,上传文件时用来作为分隔符
NSURL *url = [NSURL URLWithString:@"url"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//设置分隔符,必须写
[request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField: @"Content-Type"];
//设置POST请求
request.HTTPMethod = @"POST";
request.timeoutInterval = 60;
//设置请求体
//cinema_id=1533
// post body
NSMutableData *body = [NSMutableData data];
NSMutableDictionary *param = [NSMutableDictionary dictionary];
[param setObject:@"value1" forKey:@"param1"];
// add params (all params are strings)
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//pic_source文本定义的名字
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", @"param1"] dataUsingEncoding:NSUTF8StringEncoding]];
//文本内容
[body appendData:[[NSString stringWithFormat:@"%@\r\n", [param objectForKey:@"param1"]] dataUsingEncoding:NSUTF8StringEncoding]];
NSData *imageData = data;
if (imageData) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//文件名字
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", @"picture"] dataUsingEncoding:NSUTF8StringEncoding]];
//设置文件类型
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[body length]];
//文件大小
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setURL:url];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSString *jsonString = [NSString stringWithFormat:@"%@", dic];
NSLog(@"返回dic:%@",jsonString);
//获取响应包
//将response 转化为一个子类的HTTPURLResponse
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
//打印状态码
NSLog(@"状态码:%li", httpResponse.statusCode);
//获取响应头
NSDictionary *responseHeader = httpResponse.allHeaderFields;
NSLog(@"响应头:%@", responseHeader);
}];
//开始网络任务
[dataTask resume];
2.AFN请求
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 'multipart/form-data;'
// 修改请求序列器 为json格式
manager.requestSerializer = [AFJSONRequestSerializer serializer];
// 设置请求头里Content-Type 为multipart/form-data;
[manager.requestSerializer setValue:@"multipart/form-data;" forHTTPHeaderField:@"Content-Type"];
// 设置响应序列器为http格式
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 在可接受的content-Type中添加 @"text/html"
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
// 发出POST请求parameters参数填写非二进制字符串参数
[manager POST:@"url" parameters:@{@"param1":@"value1"}constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
// 这里拼接 图片二进制数据这个mimeType必须有
[formData appendPartWithFileData:UIImageJPEGRepresentation([UIImage imageNamed:@"123.jpg"], 1.0) name:@"picture" fileName:@"123.jpg" mimeType:@"image/jpeg"];
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"111---%@",responseObject);
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSLog(@"222---%@", dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error == %@", error);
}];