Objective-Cã§multipart/form-dataå½¢å¼ã§POSTãã
ãã£ããä½ã£ããã©ãæ®å¿µãªãã使ããªããã
Randomã¯ã©ã¹ã¯前回ä½ã£ãç©ã
ã
ä½¿ãæ¹
// multipart Multipart *multi = [[Multipart alloc] init]; [multi addString:@"aaaaaaaaaaaaaaaaaaaa" forKey:@"aaa"]; [multi addString:@"bbbbbbbbbbbbbbbbbbbb" forKey:@"bbb"]; [multi addString:@"cccccccccccccccccccc" forKey:@"ccc"]; // http NSURL *url = [NSURL URLWithString:@"http://example.com/"]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; NSData *body = [multi body]; NSLog(@"body length: %d", [body length]); [request setHTTPMethod:@"POST"]; [request setCachePolicy:NSURLRequestUseProtocolCachePolicy]; [request setTimeoutInterval:10.0]; [request setHTTPBody:body]; [request setValue:[NSString stringWithFormat:@"%d", [body length]] forHTTPHeaderField:@"Content-Length"]; [request setValue:[multi contentType] forHTTPHeaderField:@"Content-Type"]; NSURLResponse *response; NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; NSLog(@"result: %@", result); [request release]; [multi release];
ã
ã½ã¼ã¹
Multipart.h
#import <Foundation/Foundation.h> @interface Multipart : NSObject { NSString *bound; NSMutableDictionary *items; } - (void)addData:(NSData *)data forKey:(NSString *)key; - (void)addString:(NSString *)string forKey:(NSString *)key; - (BOOL)hasItems; - (NSString *)contentType; - (NSData *)body; @end
ã
Multipart.m
#import "Multipart.h" #import "Random.h" @implementation Multipart - (id)init { self = [super init]; if (self) { items = [[NSMutableDictionary alloc] init]; bound = [[Random randAsciiString:32] retain]; } return self; } // Data追å - (void)addData:(NSData *)data forKey:(NSString *)key { [items setObject:data forKey:key]; } // String追å - (void)addString:(NSString *)string forKey:(NSString *)key { [self addData:[string dataUsingEncoding:NSUTF8StringEncoding] forKey:key]; } // itemã1å以ä¸ããã - (BOOL)hasItems { return 0<[items count]; } // ContentTypeåå¾ - (NSString *)contentType { return [NSString stringWithFormat:@"multipart/form-data; boundary=%@", bound]; } // PostBodyåå¾ - (NSData *)body { NSMutableData *data = [NSMutableData data]; for (id key in items) { NSData *value = [items objectForKey:key]; [data appendData:[[NSString stringWithFormat:@"--%@\r\n", bound] dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[[NSString stringWithFormat:@"Content-Length: %d\r\n", [value length]] dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:value]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; } [data appendData:[[NSString stringWithFormat:@"--%@--\r\n", bound] dataUsingEncoding:NSUTF8StringEncoding]]; return data; } - (void)dealloc { [bound release]; [items release]; [super dealloc]; } @end