Guest User

Untitled

a guest
Apr 27th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. #import "NSDictionary+HTTP.h"
  2.  
  3.  
  4. @implementation NSDictionary (HTTPExtensions)
  5.  
  6. - (NSString *) formatForHTTP
  7. {
  8. return [self formatForHTTPUsingEncoding:NSASCIIStringEncoding];
  9. }
  10.  
  11. - (NSString *) formatForHTTPUsingEncoding:(NSStringEncoding)inEncoding
  12. {
  13. return [self formatForHTTPUsingEncoding:inEncoding ordering:nil];
  14. }
  15.  
  16. - (NSString *) formatForHTTPUsingEncoding:(NSStringEncoding)inEncoding ordering:(NSArray *)inOrdering
  17. {
  18. NSMutableString *s = [NSMutableString stringWithCapacity:256];
  19. NSEnumerator *e = (nil == inOrdering) ? [self keyEnumerator] : [inOrdering objectEnumerator];
  20. id key;
  21. CFStringEncoding cfStrEnc = CFStringConvertNSStringEncodingToEncoding(inEncoding);
  22.  
  23. while ((key = [e nextObject]))
  24. {
  25. id keyObject = [self objectForKey: key];
  26. // conform with rfc 1738 3.3, also escape URL-like characters that might be in the parameters
  27. NSString *escapedKey
  28. = (NSString *) CFURLCreateStringByAddingPercentEscapes(
  29. NULL, (CFStringRef) key, NULL, (CFStringRef) @";:&=/+", cfStrEnc);
  30. if ([keyObject respondsToSelector: @selector(objectEnumerator)])
  31. {
  32. NSEnumerator *multipleValueEnum = [keyObject objectEnumerator];
  33. id aValue;
  34.  
  35. while ((aValue = [multipleValueEnum nextObject]))
  36. {
  37. NSString *escapedObject
  38. = (NSString *) CFURLCreateStringByAddingPercentEscapes(
  39. NULL, (CFStringRef) [aValue description], NULL, (CFStringRef) @";:&=/+", cfStrEnc);
  40. [s appendFormat:@"%@=%@&", escapedKey, escapedObject];
  41. }
  42. }
  43. else
  44. {
  45. NSString *escapedObject
  46. = (NSString *) CFURLCreateStringByAddingPercentEscapes(
  47. NULL, (CFStringRef) [keyObject description], NULL, (CFStringRef) @";:&=/+", cfStrEnc);
  48. if([escapedObject isEqualToString:@""])
  49. {
  50. [s appendFormat:@"%@&", escapedKey];
  51.  
  52. }
  53. else{
  54. [s appendFormat:@"%@=%@&", escapedKey, escapedObject];
  55. }
  56. }
  57. }
  58. // Delete final & from the string
  59. if (![s isEqualToString:@""])
  60. {
  61. [s deleteCharactersInRange:NSMakeRange([s length]-1, 1)];
  62. }
  63. return s;
  64. }
  65.  
  66. @end
Add Comment
Please, Sign In to add comment