假如请求路径是:http://192.168.1.102:8080/MJServer/login
请求参数: username:母鸡 pwd:123一.异步POST请求
要想在IOS中发送一个POST请求,那么首先了解一下POST请求细节:
1.跟GET不一样,POST的请求方式不是拼接在请求路径后面,而是以请求体的形式发送到服务器端。
2.POST请求需要发送两部分的数据到服务器端。
请求体内容: username=%E6%AF%8D%E9%B8%A1&pwd=123 //中文参数需要被编码 ”母鸡“被编译成 “%E6%AF%8D%E9%B8%A1” 请求头信息 : Content - Length 请求体长度 Content - Type 请求数据类型
POST请求代码实现:
//请求地址
NSString *urlString = @"http://192.168.1.102:8080/MJServer/login";
//初始化一个NSURL对象
NSURL *url = [NSURL URLWithString:urlString];
//初始化一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//设置请求方法,可以省略,缺省GET请求
request.HTTPMethod = @"POST";
//如果60秒过后服务器还没有响应,就算请求超时
request.timeoutInterval = 60;
//拼接请求参数
NSString *params = @"username = 母鸡&pwd = 123";
//对字符串进行编码后转成NSData对象
NSData *data = [params dataUsingEncoding:NSUTF8StringEncoding];
//设置请求体
request.HTTPBody = data;
/*
//设置请求头信息-请求体长度
NSString *contentLength = [NSString stringWithFormat:@"%i",data.length];
[request setValue:contentLength forHTTPHeaderField:@"Content-Length"];
//设置请求头信息-请求数据类型
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
可以省略部分,只要设置请求体,系统在发送的时候会在根据请求体自动加上相应的请求头信息的。
*/
//初始化一个连接
NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
//开始一个异步请求,缺省异步请求
[conn start];
除了start,NSURLConnection还提供2个静态方法帮助我们发送HTTP请求
1.异步请求
//请求地址
NSString *urlString = @"http://192.168.1.102:8080/MJServer/login?username = 123pwd = 123";
//初始化一个NSURL对象
NSURL *url = [NSURL URLWithString:urlString];
//初始化一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//初始化一个操作队列
NSOperationQueue *queue = [[[NSOperationQueue alloc]init]autorelease];
//发送一个异步请求
// 第一个参数是NSURLRequest对象,封装的是一个GET请求 第二个参数是一个操作队列NSOperationQueue,当服务器成功返回数据时,系统会将第三个参数中传入的Block放到这个操作队列中执行 第三个参数是一个Block,当服务器成功返回时会回调这个Block,Block中的NSData *data就是成功返回的数据。
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data,NSError *error){
//解析成字符串数据
NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"%@",str);
}];
2.同步请求
//请求地址
NSString *urlString = @"http://192.168.1.102:8080/MJServer/login?username = 123pwd = 123";
//初始化一个NSURL对象
NSURL *url = [NSURL URLWithString:urlString];
//初始化一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//初始化一个操作队列
NSOperationQueue *queue = [[[NSOperationQueue alloc]init]autorelease];
//发送一个同步请求
//这是一个阻塞式的方法,也就是说等服务器返回所有数据后,这个方法才会返回。返回值是一个NSData对象,存放着服务器返回所有数据
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//解析成字符串数据
NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"%@",str);