服务器之家

服务器之家 > 正文

详解iOS通过ASIHTTPRequest提交JSON数据

时间:2021-02-27 15:56     来源/作者:浣熊

先验知识——什么是ASIHTTPRequest?

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

上传JSON格式数据

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
          }
        }

代码段第一行:

?
1
NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];

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

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

?
1
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];

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

?
1
NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];

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

下面一句注视掉的语句

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

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

下面到了ASIHTTPRequest功能部分:

?
1
2
NSURL *url = [NSURL URLWithString:@"http://xxxx"];
          ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

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

接下来两句:

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

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

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

?
1
2
[request setRequestMethod:@"POST"];
          [request setPostBody:tempJsonData];

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

?
1
[request startSynchronous];

最后的一段:

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

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

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

原文链接:http://blog.csdn.net/yuanbohx/article/details/10343179

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部