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

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

先验知识——什么是ASIHTTPRequest?

 

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

 

如何使用ASIHTTPRequest?

 

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

 

上传JSON格式数据

 

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

 

[cpp] 
 
  1. NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];  
  2.                 if ([NSJSONSerialization isValidJSONObject:user])  
  3.                 {  
  4.                     NSError *error;  
  5.                     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];  
  6.                     NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];  
  7.                     //NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);  
  8.                       
  9.                     NSURL *url = [NSURL URLWithString:@"http://42.96.140.61/lev_version.php"];  
  10.                     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  11.                     [request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];  
  12.                     [request addRequestHeader:@"Accept" value:@"application/json"];  
  13.                     [request setRequestMethod:@"POST"];  
  14.                     [request setPostBody:tempJsonData];  
  15.                     [request startSynchronous];  
  16.                     NSError *error1 = [request error];  
  17.                     if (!error1) {  
  18.                         NSString *response = [request responseString];  
  19.                         NSLog(@"Test:%@",response);  
  20.                     }  
  21.                 }  

 

 

 

 

 

代码段第一行:

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

 

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

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

 

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

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

 

 

[cpp] 
 
  1. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];  

 

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

下面一句注视掉的语句

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

 

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

下面到了ASIHTTPRequest功能部分:

 

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

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

 

接下来两句:

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

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

 

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

 

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

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

 

 

[cpp] 
 
  1. [request startSynchronous];  

最后的一段:

 

 

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

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

转载地址:http://rqezl.baihongyu.com/

你可能感兴趣的文章
[LeetCode] Largest Rectangle in Histogram 解题报告
查看>>
apache配置中ProxyPassReverse指令的含义
查看>>
算法整理-二叉树和堆栈
查看>>
如何设计一个“高大上”的 logo
查看>>
clustalo安装
查看>>
[日常] Go语言圣经--示例: 并发的Clock服务习题
查看>>
SCUT个人整理的常见问题
查看>>
二十二、Command 命令模式
查看>>
HDU Just a Hook
查看>>
什么是webpack?
查看>>
20165206学习基础和C语言基础调查
查看>>
httpclient的几种请求URL的方式
查看>>
UIImageView动画 UISlider控制速度
查看>>
JAVA自学笔记08
查看>>
C/C++——strcpy函数的实现
查看>>
KMP算法
查看>>
leetcode------Symmetric Tree
查看>>
spring声明式事务 同一类内方法调用事务失效
查看>>
C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩
查看>>
zookeeper项目使用几点小结
查看>>