当前位置: 移动技术网 > IT编程>移动开发>IOS > 详解iOS通过ASIHTTPRequest提交JSON数据

详解iOS通过ASIHTTPRequest提交JSON数据

2019年07月24日  | 移动技术网IT编程  | 我要评论

徐水县政府,吉雅·可汗,soiseek

先验知识——什么是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); 
          } 

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网