NSUrlConnection有同步和异步请求http链接的方法。
///http NSURLConnection sendAsynchronousRequest
- (void)httpAsynchronousRequest{
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSString *post = @"postData";
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
[request setTimeoutInterval:10.0];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request
queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError) {
NSLog(@"Httperror:%@ %ld", connectionError.localizedDescription, (long)connectionError.code);
}else {
NSInteger responseCode = [(NSHTTPURLResponse *)response statusCode];
NSString *responseString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"HttpResponseCode %ld", (long)responseCode);
NSLog(@"HttpResponseBody %@", responseString);
}
}];
}
///http NSURLConnection connectionWithRequest
- (void)httpConnectionWithRequest{
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[NSURLConnection connectionWithRequest:request delegate:self];
}
///DEBUGGING
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSInteger responseCode = [(NSHTTPURLResponse *)response statusCode];
NSLog(@"response length = %lld statusCode %ld", [response expectedContentLength], responseCode);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
if (_myData == nil) {
_myData = [[NSMutableData alloc]initWithData:data];
}else{
[self.myData appendData:data];
NSLog(@"appendData");
}
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"response error: %@", [error localizedFailureReason]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSString *responseString = [[NSString alloc]initWithData:self.myData encoding:NSUTF8StringEncoding];
NSLog(@"response body %@", responseString);
}
///NSURLConnection sendSynchronousRequest
- (void)httpSynchronousRequest {
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
if (error == nil) {
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"response data: %@", str);
}
}
ps:异步请求不会阻塞线程,程序继续往下执行,请求完成会执行回调函数或者执行block。同步请求会阻塞线程,直到请求完成,继续往下执行,多用于少量数据的请求,或者接下来需要用到请求来的数据的情况下。