参考:http://stackoverflow.com/questions/5537297/ios-how-to-perform-an-http-post-request
You can use NSURLConnection as follows:
-
Set your
NSURLRequest
: UserequestWithURL:(NSURL *)theURL
to initialise the request.If you need to specify a POST request and/or HTTP headers, use
NSMutableURLRequest
with-
(void)setHTTPMethod:(NSString *)method
-
(void)setHTTPBody:(NSData *)data
-
(void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field
-
-
Send your request in 2 ways using
NSURLConnection
:-
Synchronously:
(NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
This returns a
NSData
variable that you can process.IMPORTANT: Remember to kick off the synchronous request in a separate thread to avoid blocking the UI.
-
Asynchronously:
(void)start
-
Don't forget to set your NSURLConnection's delegate to handle the connection as follows:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[self.data setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
[self.data appendData:d];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"")
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"")
otherButtonTitles:nil] autorelease] show];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];
// Do anything you want with it
[responseText release];
}
// Handle basic authentication challenge if needed
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
NSString *username = @"username";
NSString *password = @"password";
NSURLCredential *credential = [NSURLCredential credentialWithUser:username
password:password
persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}