欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

详解iOS通过ASIHTTPRequest提交JSON数据

程序员文章站 2023-12-22 09:10:46
先验知识——什么是asihttprequest? 使用ios sdk中的http网络请求api,相当的复杂,调用很繁琐,asihttprequest就是一个对cfnetw...

先验知识——什么是asihttprequest?

使用ios sdk中的http网络请求api,相当的复杂,调用很繁琐,asihttprequest就是一个对cfnetwork api进行了封装,并且使用起来非常简单的一套api,用objective-c编写,可以很好的应用在mac os x系统和ios平台的应用程序中。asihttprequest适用于基本的http请求,和基于rest的服务之间的交互。

上传json格式数据

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

nsdictionary *user = [[nsdictionary alloc] initwithobjectsandkeys:@"0", @"version", nil]; 
        if ([nsjsonserialization isvalidjsonobject:user]) 
        { 
          nserror *error; 
          nsdata *jsondata = [nsjsonserialization datawithjsonobject:user options:nsjsonwritingprettyprinted error: &error]; 
          nsmutabledata *tempjsondata = [nsmutabledata datawithdata:jsondata]; 
          //nslog(@"register json:%@",[[nsstring alloc] initwithdata:tempjsondata encoding:nsutf8stringencoding]); 
           
          nsurl *url = [nsurl urlwithstring:@"http://42.96.140.61/lev_version.php"]; 
          asihttprequest *request = [asihttprequest requestwithurl:url]; 
          [request addrequestheader:@"content-type" value:@"application/json; encoding=utf-8"]; 
          [request addrequestheader:@"accept" value:@"application/json"]; 
          [request setrequestmethod:@"post"]; 
          [request setpostbody:tempjsondata]; 
          [request startsynchronous]; 
          nserror *error1 = [request error]; 
          if (!error1) { 
            nsstring *response = [request responsestring]; 
            nslog(@"test:%@",response); 
          } 
        } 

代码段第一行:

nsdictionary *user = [[nsdictionary alloc] initwithobjectsandkeys:@"0", @"version", nil]; 

构造了一个最简单的字典类型的数据,因为自ios 5后提供把nsdictionary转换成json格式的api。

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

nsdata *jsondata = [nsjsonserialization datawithjsonobject:user options:nsjsonwritingprettyprinted error: &error]; 

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

nsmutabledata *tempjsondata = [nsmutabledata datawithdata:jsondata]; 

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

下面一句注视掉的语句

//nslog(@"register json:%@",[[nsstring alloc] initwithdata:tempjsondata encoding:nsutf8stringencoding]); 

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

下面到了asihttprequest功能部分:

nsurl *url = [nsurl urlwithstring:@"http://xxxx"]; 
          asihttprequest *request = [asihttprequest requestwithurl:url]; 

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

接下来两句:

[request addrequestheader:@"content-type" value:@"application/json; encoding=utf-8"]; 
          [request addrequestheader:@"accept" value:@"application/json"]; 

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

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

[request setrequestmethod:@"post"]; 
          [request setpostbody:tempjsondata]; 

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

[request startsynchronous]; 

最后的一段:

if (!error1) { 
            nsstring *response = [request responsestring]; 
            nslog(@"rev:%@",response); 
          } 

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: