Skip to content

Commit

Permalink
Added support to generate an HTTP POST Body from a dictionary for URL…
Browse files Browse the repository at this point in the history
… Encoded Form Data
  • Loading branch information
Cory Imdieke committed Jan 5, 2012
1 parent 0c1cb33 commit 0c4bab8
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/Seriously.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,6 @@
+ (NSURL *)url:(id)url params:(id)params;
+ (NSString *)formatQueryParams:(id)params;
+ (NSString *)escapeQueryParam:(id)param;
+ (NSData *)buildURLEncodedPostBodyWithKeys:(NSDictionary *)keys;

@end
25 changes: 24 additions & 1 deletion src/Seriously.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
const NSString *kSeriouslyHeaders = @"kSeriouslyHeaders";
const NSString *kSeriouslyBody = @"kSeriouslyBody";
const NSString *kSeriouslyProgressHandler = @"kSeriouslyProgressHandler";
const NSString *kSeriouslyPostDictionary = @"kSeriouslyPostDictionary";

@implementation Seriously

Expand All @@ -31,7 +32,13 @@ + (SeriouslyOperation *)request:(NSMutableURLRequest *)request options:(NSDictio
[request setAllHTTPHeaderFields:[options objectForKey:kSeriouslyHeaders]];

if ([[request HTTPMethod] isEqual:@"POST"] || [[request HTTPMethod] isEqual:@"PUT"]) {
[request setHTTPBody:[options objectForKey:kSeriouslyBody]];
if([options objectForKey:kSeriouslyPostDictionary]){
NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
[request setValue:[NSString stringWithFormat:@"application/x-www-form-urlencoded; charset=%@", charset] forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[self buildURLEncodedPostBodyWithKeys:[options objectForKey:kSeriouslyPostDictionary]]];
} else {
[request setHTTPBody:[options objectForKey:kSeriouslyBody]];
}
}

NSLog(@"(%@) %@", [request HTTPMethod], [request URL]);
Expand Down Expand Up @@ -169,4 +176,20 @@ + (NSString *)escapeQueryParam:(id)param {
return [(NSString *)escaped autorelease];
}

+ (NSData *)buildURLEncodedPostBodyWithKeys:(NSDictionary *)keys {
NSMutableData *postBody = [NSMutableData data];

__block NSUInteger i = 0;
NSUInteger count = [keys count] - 1;
[keys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSString *data = [NSString stringWithFormat:@"%@=%@%@", [self escapeQueryParam:key], [self escapeQueryParam:obj], (i < count) ? @"&" : @""];
[postBody appendData:[data dataUsingEncoding:NSUTF8StringEncoding]];
i++;
}];

NSLog(@"Generated POST Body: %@", [[[NSString alloc] initWithData:postBody encoding:NSUTF8StringEncoding] autorelease]);

return [NSData dataWithData:postBody];
}

@end
3 changes: 2 additions & 1 deletion src/SeriouslyConstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ extern const NSString *kSeriouslyMethod;
extern const NSString *kSeriouslyTimeout;
extern const NSString *kSeriouslyHeaders;
extern const NSString *kSeriouslyBody;
extern const NSString *kSeriouslyProgressHandler;
extern const NSString *kSeriouslyProgressHandler;
extern const NSString *kSeriouslyPostDictionary;

0 comments on commit 0c4bab8

Please sign in to comment.