Toggle navigation
Toggle navigation
This project
Loading...
Sign in
iOS
/
asi-http-request
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Ben Copsey
2009-10-03 13:10:31 +0100
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
2edb2a8d4ecf3f8102a956a2e851bcfb45d165be
2edb2a8d
1 parent
78bf44a2
Added the ability to set the charset of ASIFormDataRequests
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
24 deletions
Classes/ASIFormDataRequest.h
Classes/ASIFormDataRequest.m
Classes/ASIFormDataRequest.h
View file @
2edb2a8
...
...
@@ -24,10 +24,12 @@ typedef enum _ASIPostFormat {
NSMutableDictionary
*
fileData
;
ASIPostFormat
postFormat
;
NSStringEncoding
stringEncoding
;
}
#pragma mark utilities
+
(
NSString
*
)
encodeURL
:
(
CFStringRef
)
string
;
-
(
NSString
*
)
encodeURL
:
(
NSString
*
)
string
;
#pragma mark setup request
...
...
@@ -48,4 +50,5 @@ typedef enum _ASIPostFormat {
@property
(
assign
)
ASIPostFormat
postFormat
;
@property
(
assign
)
NSStringEncoding
stringEncoding
;
@end
...
...
Classes/ASIFormDataRequest.m
View file @
2edb2a8
...
...
@@ -20,23 +20,28 @@
@implementation
ASIFormDataRequest
#pragma mark utilities
+
(
NSString
*
)
encodeURL
:(
CFStringRef
)
string
-
(
NSString
*
)
encodeURL
:(
NSString
*
)
string
{
CFStringRef
result
=
CFURLCreateStringByAddingPercentEscapes
(
kCFAllocatorDefault
,
string
,
NULL
,
CFSTR
(
":/?#[]@!$ &'()*+,;=
\"
<>%{}|
\\
^~`"
),
kCFStringEncodingUTF8
);
return
[(
NSString
*
)
result
autorelease
];
NSString
*
newString
=
[(
NSString
*
)
CFURLCreateStringByAddingPercentEscapes
(
kCFAllocatorDefault
,
(
CFStringRef
)
string
,
NULL
,
CFSTR
(
":/?#[]@!$ &'()*+,;=
\"
<>%{}|
\\
^~`"
),
CFStringConvertNSStringEncodingToEncoding
([
self
stringEncoding
]))
autorelease
];
if
(
newString
)
{
return
newString
;
}
return
@""
;
}
#pragma mark init / dealloc
+
(
id
)
requestWithURL
:(
NSURL
*
)
newURL
{
ASIFormDataRequest
*
request
=
[[[
self
alloc
]
initWithURL
:
newURL
]
autorelease
];
[
request
setPostFormat
:
ASIMultipartFormDataPostFormat
];
return
request
;
return
[[[
self
alloc
]
initWithURL
:
newURL
]
autorelease
];
}
-
(
id
)
initWithURL
:(
NSURL
*
)
newURL
{
self
=
[
super
initWithURL
:
newURL
];
[
self
setPostFormat
:
ASIMultipartFormDataPostFormat
];
[
self
setStringEncoding
:
NSUTF8StringEncoding
];
return
self
;
}
-
(
void
)
dealloc
...
...
@@ -134,21 +139,23 @@
-
(
void
)
buildMultipartFormDataPostBody
{
NSString
*
charset
=
(
NSString
*
)
CFStringConvertEncodingToIANACharSetName
(
CFStringConvertNSStringEncodingToEncoding
([
self
stringEncoding
]));
// Set your own boundary string only if really obsessive. We don't bother to check if post data contains the boundary, since it's pretty unlikely that it does.
NSString
*
stringBoundary
=
@"0xKhTmLbOuNdArY"
;
[
self
addRequestHeader
:
@"Content-Type"
value
:[
NSString
stringWithFormat
:
@"multipart/form-data; charset=
UTF-8; boundary=%@"
,
stringBoundary
]];
[
self
addRequestHeader
:
@"Content-Type"
value
:[
NSString
stringWithFormat
:
@"multipart/form-data; charset=
%@; boundary=%@"
,
charset
,
stringBoundary
]];
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"--%@
\r\n
"
,
stringBoundary
]
dataUsingEncoding
:
NSUTF8StringEncoding
]];
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"--%@
\r\n
"
,
stringBoundary
]
dataUsingEncoding
:
[
self
stringEncoding
]
]];
// Adds post data
NSData
*
endItemBoundary
=
[[
NSString
stringWithFormat
:
@"
\r\n
--%@
\r\n
"
,
stringBoundary
]
dataUsingEncoding
:
NSUTF8StringEncoding
];
NSData
*
endItemBoundary
=
[[
NSString
stringWithFormat
:
@"
\r\n
--%@
\r\n
"
,
stringBoundary
]
dataUsingEncoding
:
[
self
stringEncoding
]
];
NSEnumerator
*
e
=
[[
self
postData
]
keyEnumerator
];
NSString
*
key
;
int
i
=
0
;
while
(
key
=
[
e
nextObject
])
{
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"Content-Disposition: form-data; name=
\"
%@
\"\r\n\r\n
"
,
key
]
dataUsingEncoding
:
NSUTF8StringEncoding
]];
[
self
appendPostData
:[[[
self
postData
]
objectForKey
:
key
]
dataUsingEncoding
:
NSUTF8StringEncoding
]];
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"Content-Disposition: form-data; name=
\"
%@
\"\r\n\r\n
"
,
key
]
dataUsingEncoding
:
[
self
stringEncoding
]
]];
[
self
appendPostData
:[[[
self
postData
]
objectForKey
:
key
]
dataUsingEncoding
:
[
self
stringEncoding
]
]];
i
++
;
if
(
i
!=
[[
self
postData
]
count
]
||
[[
self
fileData
]
count
]
>
0
)
{
//Only add the boundary if this is not the last item in the post body
[
self
appendPostData
:
endItemBoundary
];
...
...
@@ -164,8 +171,8 @@
NSString
*
contentType
=
[
fileInfo
objectForKey
:
@"contentType"
];
NSString
*
fileName
=
[
fileInfo
objectForKey
:
@"fileName"
];
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"Content-Disposition: form-data; name=
\"
%@
\"
; filename=
\"
%@
\"\r\n
"
,
key
,
fileName
]
dataUsingEncoding
:
NSUTF8StringEncoding
]];
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"Content-Type: %@; charset=
UTF-8
\r\n\r\n
"
,
contentType
]
dataUsingEncoding
:
NSUTF8StringEncoding
]];
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"Content-Disposition: form-data; name=
\"
%@
\"
; filename=
\"
%@
\"\r\n
"
,
key
,
fileName
]
dataUsingEncoding
:
[
self
stringEncoding
]
]];
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"Content-Type: %@; charset=
%@
\r\n\r\n
"
,
contentType
,
charset
]
dataUsingEncoding
:[
self
stringEncoding
]
]];
if
([
file
isKindOfClass
:[
NSString
class
]])
{
[
self
appendPostDataFromFile
:
file
];
...
...
@@ -179,7 +186,7 @@
}
}
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"
\r\n
--%@--
\r\n
"
,
stringBoundary
]
dataUsingEncoding
:
NSUTF8StringEncoding
]];
[
self
appendPostData
:[[
NSString
stringWithFormat
:
@"
\r\n
--%@--
\r\n
"
,
stringBoundary
]
dataUsingEncoding
:
[
self
stringEncoding
]
]];
}
...
...
@@ -191,8 +198,9 @@
[
self
buildMultipartFormDataPostBody
];
return
;
}
[
self
addRequestHeader
:
@"Content-Type"
value
:
@"application/x-www-form-urlencoded; charset=UTF-8"
];
NSString
*
charset
=
(
NSString
*
)
CFStringConvertEncodingToIANACharSetName
(
CFStringConvertNSStringEncodingToEncoding
([
self
stringEncoding
]));
[
self
addRequestHeader
:
@"Content-Type"
value
:[
NSString
stringWithFormat
:
@"application/x-www-form-urlencoded; charset=%@"
,
charset
]];
NSEnumerator
*
e
=
[[
self
postData
]
keyEnumerator
];
...
...
@@ -200,8 +208,8 @@
int
i
=
0
;
int
count
=
[[
self
postData
]
count
]
-
1
;
while
(
key
=
[
e
nextObject
])
{
NSString
*
data
=
[
NSString
stringWithFormat
:
@"%@=%@%@"
,
[
ASIFormDataRequest
encodeURL
:(
CFStringRef
)
key
],
[
ASIFormDataRequest
encodeURL
:(
CFStringRef
)
[[
self
postData
]
objectForKey
:
key
]],(
i
<
count
?
@"&"
:
@""
)];
[
self
appendPostData
:[
data
dataUsingEncoding
:
NSUTF8StringEncoding
]];
NSString
*
data
=
[
NSString
stringWithFormat
:
@"%@=%@%@"
,
[
self
encodeURL
:
key
],
[
self
encodeURL
:
[[
self
postData
]
objectForKey
:
key
]],(
i
<
count
?
@"&"
:
@""
)];
[
self
appendPostData
:[
data
dataUsingEncoding
:
[
self
stringEncoding
]
]];
i
++
;
}
}
...
...
@@ -209,5 +217,5 @@
@synthesize
postData
;
@synthesize
fileData
;
@synthesize
postFormat
;
@synthesize
stringEncoding
;
@end
...
...
Please
register
or
login
to post a comment