• iOS通过ASIHTTPRequest提交JSON数据


    先验知识——什么是ASIHTTPRequest?

    使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。

    如何使用ASIHTTPRequest?

    网上有很多专门介绍ASIHTTPRequest使用的文章,很详细,楼主就不赘述了哈,在此给出一篇经典的介绍详细的文章链接:http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html

    上传JSON格式数据

    首先给出主功能代码段,然后对代码进行详细解析:

    [cpp] view plaincopy
     
    1. NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];  
    2.                 if ([NSJSONSerialization isValidJSONObject:user])  
    3.                 {  
    4.                     NSError *error;  
    5.                     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];  
    6.                     NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];  
    7.                     //NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);  
    8.                       
    9.                     NSURL *url = [NSURL URLWithString:@"http://42.96.140.61/lev_version.php"];  
    10.                     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
    11.                     [request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];  
    12.                     [request addRequestHeader:@"Accept" value:@"application/json"];  
    13.                     [request setRequestMethod:@"POST"];  
    14.                     [request setPostBody:tempJsonData];  
    15.                     [request startSynchronous];  
    16.                     NSError *error1 = [request error];  
    17.                     if (!error1) {  
    18.                         NSString *response = [request responseString];  
    19.                         NSLog(@"Test:%@",response);  
    20.                     }  
    21.                 }  
    
    
    

    代码段第一行:

    [cpp] view plaincopy
     
    1. NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];  

    构造了一个最简单的字典类型的数据,因为自iOS 5后提供把NSDictionary转换成JSON格式的API。

    第二行if判断该字典数据是否可以被JSON化。

    [cpp] view plaincopy
     
    1. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];  

    这一句就是把NSDictionary转换成JSON格式的方法,JSON格式的数据存储在NSData类型的变量中。

    [cpp] view plaincopy
     
    1. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];  

    这一句是把NSData转换成NSMutableData,原因是下面我们要利用ASIHTTPRequest发送JSON数据时,其消息体一定要以NSMutableData的格式存储。

    下面一句注视掉的语句

    [cpp] view plaincopy
     
    1. //NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);  

    主要作用是记录刚才JSON格式化的数据

    下面到了ASIHTTPRequest功能部分:

    [cpp] view plaincopy
     
    1. NSURL *url = [NSURL URLWithString:@"http://xxxx"];  
    2.                     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  

    这两句的主要功能是设置要与客户端交互的服务器端地址。

    接下来两句:

    [cpp] view plaincopy
     
    1. [request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];  
    2.                     [request addRequestHeader:@"Accept" value:@"application/json"];  

    是设置HTTP请求信息的头部信息,从中可以看到内容类型是JSON。

    接下来是设置请求方式(默认为GET)和消息体:

    [cpp] view plaincopy
     
    1. [request setRequestMethod:@"POST"];  
    2.                     [request setPostBody:tempJsonData];  

    一切设置完毕后开启同步请求:

    [cpp] view plaincopy
     
    1. [request startSynchronous];  


    最后的一段:

    [cpp] view plaincopy
     
    1. if (!error1) {  
    2.                         NSString *response = [request responseString];  
    3.                         NSLog(@"Rev:%@",response);  
    4.                     }  

    是打印服务器返回的响应信息。

  • 相关阅读:
    linux -- Ubuntu 安装搜狗输入法
    linux -- Ubuntuserver图形界面下安装、配置lampp、phpmyadmin
    linux -- ubuntu14.10安装gnome桌面环境和dock工具
    linux -- Ubuntu Server 安装图形界面
    linux -- Ubuntu 命令技巧合集
    linux -- ubuntu 何为软件源
    linux -- Ubuntu报错“unable to locate package...”
    linux -- Ubuntu图形界面终端实现注销、关机、重启
    php -- 读取文本文件内容
    NEXTDAY
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/4278871.html
Copyright © 2020-2023  润新知