异步POST请求和同步请求

假如请求路径是: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];


二. NSURLConnection 的其他请求方法:

除了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);



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值