详解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); }
是打印服务器返回的响应信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。