您的位置:首页 > 理论基础 > 计算机网络

post网络请求,支持多层字典参数

2015-10-23 21:49 555 查看
支持多层字典参数,原型是参考别人的,再进行了多层字典参数的判断
/// post 普通参数
+ (void)postAsynWithURL:(NSURL*)aURL parems:(NSDictionary *)postParems compile:(void(^)(id response, NSData *data, NSError *error))block;
</pre><pre name="code" class="objc">
/// post data、imageData ;imageContentType 填写为image/png、image/webp、image/*之类的,或者不填;imageName 填服务器的image对应的参数名
+ (void)postImageAsynwithURL:(NSURL *)aUrl parems:(NSDictionary *)postKeys withImageData:(NSData *)data ImageName:(NSString *)name ImageContentType:(NSString *)imageContentType compile:(void(^)(id response, NSData *data, NSError *error))block;

+ (void)postAsynWithURL:(NSURL*)aURL parems:(NSDictionary *)postParems compile:(void(^)(id response, NSData *data, NSError *error))block{

NSString * parameterStr = @"";

for (NSString * key  in postParems) {

NSString * content = postParems[key];

if ([content isKindOfClass:[NSDictionary class]] || [content isKindOfClass:[NSArray class]]) {

NSData * data = [NSJSONSerialization dataWithJSONObject:content options:0 error:nil];

content = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

}

//      if (content.length > 0) {

parameterStr = [NSString stringWithFormat:@"%@&%@=%@",parameterStr,key,content];

//      }

}

if ([parameterStr hasPrefix:@"&"]) {

parameterStr = [parameterStr substringFromIndex:1];

}

NSData * postData = [parameterStr dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

NSString *postLength = [NSString stringWithFormat:@"%@",@([postData length])];

//    NSLog(@"url_parameterStr : %@",parameterStr);

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:aURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5];

[request setHTTPMethod:@"POST"];

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

[request setValue:postLength forHTTPHeaderField:@"Content-Length"];

[request setHTTPBody:postData];

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

if (!connectionError) {

id resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&connectionError];

block(resultDic,data,connectionError);

}else{

block(nil,data,connectionError);

}

}];

}
</pre><pre name="code" class="objc">
+ (void)postImageAsynwithURL:(NSURL *)aUrl parems:(NSDictionary *)postKeys withImageData:(NSData *)data ImageName:(NSString *)name ImageContentType:(NSString *)imageContentType compile:(void(^)(id response, NSData *data, NSError *error))block{

if (imageContentType.length < 1) {

imageContentType = @"application/octet-stream";

}

//Add the header info

NSString *stringBoundary = @"0xKhTmLbOuNdArY";

//create the body

NSMutableData *postBody = [NSMutableData data];

[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

//add key values from the NSDictionary object

NSEnumerator *keys = [postKeys keyEnumerator];

for (NSInteger i = 0; i < [postKeys count]; i++) {

NSString *tempKey = [keys nextObject];

[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",tempKey] dataUsingEncoding:NSUTF8StringEncoding]];

NSString * content = [postKeys objectForKey:tempKey];

if ([content isKindOfClass:[NSDictionary class]] || [content isKindOfClass:[NSArray class]]) {

NSData * data = [NSJSONSerialization dataWithJSONObject:content options:0 error:nil];

content = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

}

[postBody appendData:[[NSString stringWithFormat:@"%@",content] dataUsingEncoding:NSUTF8StringEncoding]];

[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

}

//add data field and file data

[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"imageName.png\"\r\n",name] dataUsingEncoding:NSUTF8StringEncoding]];

[postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n",imageContentType] dataUsingEncoding:NSUTF8StringEncoding]];

[postBody appendData:[NSData dataWithData:data]];

[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

NSString *postLength = [NSString stringWithFormat:@"%@",@([postBody length])];

NSMutableURLRequest *tumblrPost = [[NSMutableURLRequest alloc]initWithURL:aUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5];

[tumblrPost setHTTPMethod:@"POST"];

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];

[tumblrPost addValue:contentType forHTTPHeaderField: @"Content-Type"];

//add the body to the post

[tumblrPost setHTTPBody:postBody];

[tumblrPost setValue:postLength forHTTPHeaderField:@"Content-Length"];

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

[NSURLConnection sendAsynchronousRequest:tumblrPost queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

if (!connectionError) {

id resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&connectionError];

block(resultDic,data,connectionError);

}else{

block(nil,data,connectionError);

}

}];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: