iOS http请求记录一下

#pragma mark 发送请求

-(void)sendPostRequest{

    NSURL *url=[NSURL URLWithString:baseURL];

    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];

    [request setTimeoutInterval:5.0];//设置超时时间

    [request setHTTPMethod:@"post"];

    [request addValue:@"ios" forHTTPHeaderField:@"platform"];//设置一下请求头

    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];//设置application/json,服务器才能获取参数

    //==========================================================================

    NSString *bodyString = [self createData];// 建立请求数据体

    NSLog(@"发送数据:%@", bodyString);

    NSData *body = [bodyString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];// 将生成的字符串转换成数据

    NSInputStream *bodyInputStream=[NSInputStream inputStreamWithData:body];

    [request setHTTPBodyStream:bodyInputStream];//把数据体设置给请求

    //==========================================================================

    //NSURLConnection替换为NSURLSessionNSURLSessionConfiguration

    /**

     三种工作模式:

     默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁盘缓存的持久化策略,使用用户keychain中保存的证书进行认证授权。

     瞬时会话模式(ephemeral):该模式不使用磁盘保存任何数据。所有和会话相关的caches,证书,cookies等都被保存在RAM中,因此当程序使会话无效,这些缓存的数据就会被自动清空。

     后台会话模式(background):该模式在后台完成上传和下载,在创建Configuration对象的时候需要提供一个NSString类型的ID用于标识完成工作的后台会话。

     */

    NSURLSessionConfiguration *configuration=[NSURLSessionConfiguration defaultSessionConfiguration];//用于配置会话的属性

    [configuration setAllowsCellularAccess:YES];//设置允许使用蜂窝数据

    [configuration setDiscretionary:YES];//YES时表示当程序在后台运作时由系统自己选择最佳的网络连接配置,该属性可以节省通过蜂窝连接的带宽

    

    /**

     获取NSURLSession类对象有几种方式:

     第一种方式是使用静态的sharedSession方法,该类使用共享的会话,该会话使用全局的CacheCookie和证书。

     第二种方式是通过sessionWithConfiguration:方法创建对象,也就是创建对应配置的会话,与NSURLSessionConfiguration合作使用。

     第三种方式是通过sessionWithConfiguration:delegate:delegateQueue方法创建对象,二三两种方式可以创建一个新会话并定制其会话类型。

        该方式中指定了session的委托和委托所处的队列。当不再需要连接时,可以调用SessioninvalidateAndCancel直接关闭,或者调用finishTasksAndInvalidate等待当前Task结束后关闭。

        这时Delegate会收到URLSession:didBecomeInvalidWithError:这个事件。Delegate收到这个事件之后会被解引用。

     */

    NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:[[NSOperationQueue alloc] init]];

    /**

     3NSURLSessionTask的子类:NSURLSessionDataTask, NSURLSessionUploadTask, NSURLSessionDownloadTask

     这三个类封装了现代应用程序的三个基本网络任务:获取数据,比如JSONXML,以及上传和下载文件

     */

    NSURLSessionDataTask *task= (NSURLSessionDataTask*)[urlSession dataTaskWithRequest:request];

    [task resume];

}

//组合JSONObject

-(NSString*)createData{

    NSError *error;

    NSString *result;

    NSMutableDictionary *rootdata=[[NSMutableDictionary alloc] init];

    [rootdata setValue:@"login" forKey:@"type"];

    [rootdata setValue:_phone forKey:@"userPhone"];

    [rootdata setValue:_password forKey:@"passWord"];

    NSData *jsonData =[NSJSONSerialization dataWithJSONObject:rootdata options:NSJSONWritingPrettyPrinted error:&error];

    result =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    return result;

}



-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [self.view endEditing:YES];

}

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

    if (textField==self.phoneText) {

        [self.phoneText resignFirstResponder];

        [self.passwordText becomeFirstResponder];

    }else{

        self.phone=self.phoneText.text;

        self.password=self.passwordText.text;

        NSLog(@"user phone is %@ and password is %@",self.phone,self.password);

        [self.passwordText resignFirstResponder];

    }

    return YES;

}



#pragma mark 代理方法


//接收到服务器的响应

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {

    // 允许处理服务器的响应,才会继续接收服务器返回的数据

    completionHandler(NSURLSessionResponseAllow);

    NSLog(@"开始接受服务器的返回请求");

}


// 接收到服务器的数据(可能调用多次)

- (void)URLSession:(NSURLSession*)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveData:(NSData *)data {

    // 做接收数据的处理——拼接处理

    if (_serverData == nil) {

        _serverData = [NSMutableData data];

    }

    // 4. 追加数据

    [_serverData appendData:data];

    // 做接收数据的处理——拼接处理

    NSLog(@"中间接收的数据:%@", data);

}


//请求成功或者失败(如果失败,error有值)

- (void)URLSession:(NSURLSession*)session task:(NSURLSessionTask*)task didCompleteWithError:(NSError *)error {

    // 请求完成,成功或者失败的处理

    NSLog(@"最终的数据是:%@", _serverData);

    // 将数据编码成NTF8格式的字符串

    NSString *string = [[NSString alloc]initWithData:_serverData encoding:NSUTF8StringEncoding];

    NSLog(@"编码后的字符串是:%@", string);

    // 释放原来接收的数据

    _serverData = nil;

    if (error) {

        NSLog(@"errorCode:%ld",error.code);

    }

}

@end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值