(转) 网络GET、POST方法
NSURLConnection常用类
主要为三个对象:
NSURL
请求的地址
NSURLRequest(NSMutableURLRequest:NSURLRequest的子类)
封装一个请求,保存发给服务器的全部数据
使用步骤
- // 1.1.1 设置请求路径
- NSString *urlStr = [NSString stringWithFormat:@"http://192.168.1.200:8080/MJServer/login?username=%@&pwd=%@", username, pwd];
- // 1.1.2转码 (URL里面不能包含中文,所以需要转码)
- urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- // 1.1.3 URL里面不能包含中文
- NSURL *url = [NSURL URLWithString:urlStr];
- // 2.1.2.根据url创建请求对象(NSURLRequest 不能修改request的值,所以使用可变请求)
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 默认就是GET请求
- request.timeoutInterval = 5; // 设置请求超时
- // POST请求:请求体
- // 1.2.1.设置请求路径
- NSURL *url = [NSURL URLWithString:@"http://192.168.1.200:8080/MJServer/login"];
- // 2.2.1.创建请求对象
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 默认就是GET请求
- request.timeoutInterval = 5; // 设置请求超时
- request.HTTPMethod = @"POST"; // 设置为POST请求
- // 2.2.2通过请求头告诉服务器客户端的类型
- [request setValue:@"ios" forHTTPHeaderField:@"User-Agent"];
- // 2.2.3设置请求体
- NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", username, pwd];
- request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
GET和POST对比
http://ww.test.com/login?username=123&pwd=234&type=JSON
3.1.使用NSURLConnection发送NSURLRequest (同步方法)
- // 3.1.1 使用同步方式发送请求(此方法是在主线程中发送,UI会卡,基本不使用)
- NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
- // 3.1.2把data转换成字符串答应
- NSString *dataStr= [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
- NSLog(@"%@",dataStr);
3.2.使用NSURLConnection发送NSURLRequest (异步方法)
- //3.2.1 使用异步方式发送请求(一般会根据获得的data数据来刷新UI空间,所以队列使用 mainQueue)
- NSOperationQueue *queue = [NSOperationQueue mainQueue];
- [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 当请求结束的时候调用 (拿到了服务器的数据, 请求失败)
- //3.2.2 把data转换成字符串答应
- NSString *dataStr= [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
- NSLog(@"%@",dataStr);
- /**
- 解析data :
- {"error":"用户名不存在"}
- {"error":"密码不正确"}
- {"success":"登录成功"}
- */
- /**
- if (data) { // 请求成功
- NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
- NSString *error = dict[@"error"];
- if (error) { // 登录失败
- [MBProgressHUD showError:error];
- } else { // 登录成功
- NSString *success = dict[@"success"];
- [MBProgressHUD showSuccess:success];
- }
- } else { // 请求失败
- [MBProgressHUD showError:@"网络繁忙, 请稍后再试"];
- }
- */
- }];
3.3.使用NSURLConnection发送NSURLRequest (代理方法,异步方式)
- // 3.3.1 设置request 与 代理
- NSURLConnection *conn4 = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
- // 3.3.2 发送请求
- [conn4 start];
需要实现代理
<NSURLConnectionDataDelegate>
一下是代理方法
- #pragma mark - NSURLConnectionDataDelegate 代理方法
- /**
- * 请求错误(失败)的时候调用(请求超时\断网\没有网, 一般指客户端错误)
- */
- - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- {
- NSLog(@"connection:didFailWithError:");
- }
- /**
- * 当接受到服务器的响应(连通了服务器)就会调用
- */
- - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- {
- NSLog(@"connection:didReceiveResponse:");
- // 初始化数据
- /**
- * 用来存放服务器返回的所有数据
- * @property (nonatomic, strong) NSMutableData *responseData;
- */
- self.responseData = [NSMutableData data];
- }
- /**
- * 当接受到服务器的数据就会调用(可能会被调用多次, 每次调用只会传递部分数据)
- */
- - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- {
- NSLog(@"connection:didReceiveData:");
- // 拼接(收集)数据
- [self.responseData appendData:data];
- }
- /**
- * 当服务器的数据接受完毕后就会调用
- */
- - (void)connectionDidFinishLoading:(NSURLConnection *)connection
- {
- NSLog(@"connectionDidFinishLoading:");
- // 解析服务器返回的数据
- NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:nil];
- NSString *error = dict[@"error"];
- if (error) { // 登录失败
- NSLog(@"登录失败");
- } else { // 登录成功
- NSString *success = dict[@"success"];
- NSLog(@"登录成功:%@",success);
- }
- }
链接:http://blog.csdn.net/dwt1220/article/details/45196161
(转) 网络GET、POST方法的更多相关文章
- Linux下多网卡同网段多IP网络分流设定方法
Linux下多网卡同网段多IP网络分流设定方法 -- :: 标签:Linux下多网卡同网段多IP网络分流设定方法 当服务器需要较高的网络流量时,在其它资源不造成瓶颈的情况下无疑会用到多网卡. 第1选项 ...
- Linux 下网络性能优化方法简析
概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑.由于数据包的转发一般是具备路由功能的设备所关注,在本文中 ...
- iphone抓取移动网络报文的方法
iphone抓取移动网络报文的方法 对iPhone进行越狱,网上有很多教程,这里不做说明.越狱后会有cydia这个app,首先对用户身份进行设置,选用开发者身份.打开这个应用,搜索openssh,找到 ...
- Android 下使用tcpdump网络抓包方法
Android 下使用tcpdump网络抓包方法 抓包需要tcpdump以及Root权限,tcpdump在本文后有下载. 首先把tcpdump传进手机,用adb命令(放SD卡有时会有问题,我一次可以用 ...
- 【转载】WIN7访问共享:0x80070035 找不到网络路径解决方法
转载:http://blog.chinaunix.net/uid-12372814-id-3518571.html 昨天刚装WIN7系统,今天早上准备访问服务器安装些软件,结果出现网络错误,提示Win ...
- 排错-Loadrunner添加Windows Resource计数器提示“找不到网络路径”解决方法
Loadrunner添加Windows Resource计数器提示“找不到网络路径”解决方法 by:授客 QQ:1033553122 1.启动windows相关服务 win->services. ...
- swift网络数据请求方法
搭建一个apache服务器,用php编写一个返回给客户端请求数据的脚本 <?php // header("Content-type:text/html;charset=utf-8&qu ...
- 蜂窝网络TDOA定位方法的Fang算法研究及仿真纠错
科学论文为我们提供科学方法,在解决实际问题中,能极大提高生产效率.但论文中一些失误则可能让使用者浪费大量时间.自己全部再推导那真不容易,怀疑的成本特别高,通常不会选择这条路.而如果真是它的问题,其它所 ...
- flask使用第三方云通讯平台时,出现{'172001':'网络错误'}解决方法
问题描述:flask使用第三方云通讯平台时,出现{'172001':'网络错误'} 解决方法: 在sms.py文件中添加如下代码 import ssl # 取消证书验证ssl._create_defa ...
- Linux网络性能优化方法简析
Linux网络性能优化方法简析 2010-12-20 10:56 赵军 IBMDW 字号:T | T 性能问题永远是永恒的主题之一,而Linux在网络性能方面的优势则显而易见,这篇文章是对于Linux ...
随机推荐
- C++——拷贝构造函数说明
一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: [c-sharp] view plaincopy 1 int a = 100; 2 int b = a; 而类对 ...
- PAT团体程序设计大赛---(模拟)
L1-1 古风排版(20 分) 中国的古人写文字,是从右向左竖向排版的.本题就请你编写程序,把一段文字按古风排版. 输入格式: 输入在第一行给出一个正整数N(<100),是每一列的字符数.第二行 ...
- 手动安装GCC
01sunxiaoqiang的博客 Centos离线手动安装gcc.g++教程 转载 2016-11-06 17:35:18 标签:linux应用笔记 在安装LINUX系统的时候很可能会没有安装gcc ...
- Death Note
注:本文系作者原创,但可随意转载. ********************************************************************************** ...
- 编写一个 Chrome 浏览器扩展程序
浏览器扩展允许我们编写程序来实现对浏览器元素(书签.导航等)以及对网页元素的交互, 甚至从 web 服务器获取数据,以 Chrome 浏览器扩展为例,扩展文件包括: 一个manifest文件(主文件, ...
- Java并发(11)- 有关线程池的10个问题
引言 在日常开发中,线程池是使用非常频繁的一种技术,无论是服务端多线程接收用户请求,还是客户端多线程处理数据,都会用到线程池技术,那么全面的了解线程池的使用.背后的实现原理以及合理的优化线程池的大小等 ...
- Spring发展史
https://www.cnblogs.com/RunForLove/p/4641672.html
- bzoj1503 郁闷的出纳员 splay版
自己yy的写法 可能有点奇怪吧 详情看代码 还是蛮短的 #include<cstdio> #include<cstring> #include<algorithm> ...
- noip2016 普及组
T1 买铅笔 题目传送门 #include<cstdio> #include<cstring> #include<algorithm> using namespac ...
- 标签 JLable 类
标签JLable上可以添加图像,当鼠标停留在标签上时,可以显示一段提示文字. package first; import javax.swing.*; import java.awt.*; impor ...