博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS通过ASIHTTPRequest提交JSON数据
阅读量:6257 次
发布时间:2019-06-22

本文共 3088 字,大约阅读时间需要 10 分钟。

hot3.png

先验知识——什么是ASIHTTPRequest?

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

如何使用ASIHTTPRequest?

网上有很多专门介绍ASIHTTPRequest使用的文章,很详细,楼主就不赘述了哈,在此给出一篇经典的介绍详细的文章链接:

上传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);                    }

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

转载于:https://my.oschina.net/LangZiAiFer/blog/200742

你可能感兴趣的文章
安得广厦千万间,大赚天下寒士俱欢颜
查看>>
这是一份优美的信息图,吴恩达点赞的deeplearning.ai课程总结
查看>>
去中心化并不是比特币的关键和核心,真的有用才是
查看>>
0629 - 基本完成 iPaste 的 Pin 管理
查看>>
经典:头像与昵称描述的位置组合
查看>>
【CSS模块化之路2】webpack中的Local Scope
查看>>
浙江移动容器云基于 Dragonfly 的统一文件分发平台生产实践
查看>>
「每日一瞥
查看>>
java 线程池
查看>>
排序算法总结
查看>>
python模块学习(二)
查看>>
近期的爬虫工作杂谈
查看>>
机器学习之 k 近邻
查看>>
canvas核心技术-如何绘制图形
查看>>
netty源码分析之pipeline(二)
查看>>
面试:讲讲 Android 的事件分发机制
查看>>
计算机程序的思维逻辑 (95) - Java 8的日期和时间API
查看>>
计算机程序的思维逻辑 (8) - char的真正含义
查看>>
2019 年技术大趋势预测
查看>>
推荐一款基于vue的滚动条插件vuescroll
查看>>