Skip to content

Instantly share code, notes, and snippets.

@minase
Created June 10, 2009 09:13
Show Gist options
  • Save minase/127108 to your computer and use it in GitHub Desktop.
Save minase/127108 to your computer and use it in GitHub Desktop.
-(NSMutableData*) createHTTPPostBodyWithParameters:(NSDictionary*)params boundary:(NSString*)boundary
{
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSMutableArray *paramsArray = [NSMutableArray array];
NSMutableData *paramsData = [NSMutableData new];
NSString *enter = @"\r\n";
for(id key in params) {
[paramsArray addObject:[NSString stringWithFormat:@"--%@%@", boundary, enter]];
[paramsArray addObject:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"", key]];
// File
if(key == @"file") {
id filePath = [params valueForKey:key];
id fileName = [filePath lastPathComponent];
id fileData = [NSData dataWithContentsOfFile:filePath];
[paramsArray addObject:[NSString stringWithFormat:@"; filename=\"%@\"%@", fileName, enter]];
[paramsArray addObject:[NSString stringWithFormat:@"Content-Type: application/octet-stream%@%@", enter, enter]];
[paramsArray addObject:fileData];
// not File
} else {
[paramsArray addObject:[NSString stringWithFormat:@"%@%@", enter, enter]];
[paramsArray addObject:[params valueForKey:key]];
}
[paramsArray addObject:[NSString stringWithFormat:@"%@", enter]];
}
// source
[paramsArray addObject:[NSString stringWithFormat:@"--%@%@", boundary, enter]];
[paramsArray addObject:@"Content-Disposition: form-data; name=\"source\""];
[paramsArray addObject:[NSString stringWithFormat:@"%@%@", enter, enter]];
[paramsArray addObject:[NSString stringWithFormat:@"%@%@", [USER_AGENT valueForKey:@"name"], enter]];
// term
[paramsArray addObject:[NSString stringWithFormat:@"--%@--", boundary]];
for(id obj in paramsArray) {
if([obj isKindOfClass:[NSString class]]) {
[paramsData appendData:[obj dataUsingEncoding:NSUTF8StringEncoding]];
} else {
if(![obj isKindOfClass:[NSData class]]) continue;
[paramsData appendData:obj];
}
}
[pool release];
return [paramsData autorelease];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment