异步POST请求和同步请求

来源:互联网 发布:sony签约网络经销商 编辑:程序博客网 时间:2024/05/18 02:47

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

    

    //初始化一个请求

    NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:url];

    //设置请求方法,可以省略,缺省GET请求

    request.HTTPMethod =@"POST";

    //如果60秒过后服务器还没有响应,就算请求超时

    request.timeoutInterval =60;

    //拼接请求参数

    NSString *params =@"username = 母鸡&pwd = 123";

    //对字符串进行编码后转成NSData对象

    NSData *data = [paramsdataUsingEncoding:NSUTF8StringEncoding];

    //设置请求体

    request.HTTPBody = data;

    /*

    //设置请求头信息-请求体长度

   NSString *contentLength = [NSStringstringWithFormat:@"%i",data.length];

    [requestsetValue:contentLength forHTTPHeaderField:@"Content-Length"];

    //设置请求头信息-请求数据类型

    [request setValue:@"application/x-www-form-urlencoded"forHTTPHeaderField:@"Content-Type"];

    可以省略部分,只要设置请求体,系统在发送的时候会在根据请求体自动加上相应的请求头信息的。

    */

    

    //初始化一个连接

    NSURLConnection *conn = [NSURLConnectionconnectionWithRequest:requestdelegate:self];

    //开始一个异步请求,缺省异步请求

    [connstart];


二. NSURLConnection 的其他请求方法:

除了start,NSURLConnection还提供2个静态方法帮助我们发送HTTP请求

  1.异步请求

//请求地址

    NSString *urlString =@"http://192.168.1.102:8080/MJServer/login?username = 123pwd = 123";

    //初始化一个NSURL对象

   NSURL *url = [NSURLURLWithString:urlString];

    

    //初始化一个请求

    NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:url];

    

    //初始化一个操作队列

    NSOperationQueue *queue = [[[NSOperationQueuealloc]init]autorelease];

    //发送一个异步请求

// 第一个参数是NSURLRequest对象,封装的是一个GET请求 第二个参数是一个操作队列NSOperationQueue,当服务器成功返回数据时,系统会将第三个参数中传入的Block放到这个操作队列中执行 第三个参数是一个Block,当服务器成功返回时会回调这个Block,Block中的NSData *data就是成功返回的数据。

    [NSURLConnectionsendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response,NSData *data,NSError *error){

        //解析成字符串数据

        NSString *str = [[[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding]autorelease];

       NSLog(@"%@",str);

    }];

    

2.同步请求

 

    //请求地址

    NSString *urlString =@"http://192.168.1.102:8080/MJServer/login?username = 123pwd = 123";

    //初始化一个NSURL对象

   NSURL *url = [NSURLURLWithString:urlString];

    

    //初始化一个请求

    NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:url];

    

    //初始化一个操作队列

    NSOperationQueue *queue = [[[NSOperationQueuealloc]init]autorelease];

    

    //发送一个同步请求

          //这是一个阻塞式的方法,也就是说等服务器返回所有数据后,这个方法才会返回。返回值是一个NSData对象,存放着服务器返回所有数据

    NSData *data = [NSURLConnectionsendSynchronousRequest:request returningResponse:nilerror:nil];

    //解析成字符串数据

    NSString *str = [[[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding]autorelease];

   NSLog(@"%@",str);



原创粉丝点击