//
// ViewController.m
// IOS_0129_HTTP请求
//
// Created by ma c on 16/1/29.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "ViewController.h"
#import "MBProgressHUD+MJ.h" @interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textName;
@property (weak, nonatomic) IBOutlet UITextField *textPassword; - (IBAction)btnlogin; @end @implementation ViewController
/*
1.常见的发送HTTP请求的方案:
1>苹果原生自带的
NSURLConnection:用法简单,最经典,最直接
NSURLSession:功能比NSURLConnection强大
CFNetwork:NSURL底层,纯C语言
2>第三方框架
ASIHttpRequest:“HTTP终结者”,功能及其强大,可惜停止更新
AFNetWorking:简单易用,提供基本够用的常用功能,维护者多
MKNetWorkKit:简单易用,维护者使用者少
3>建议
为了提高开发效率,企业开发用的基本是第三方框架 2.常用类
1>NSURL:请求地址
2>NSURLRequest:一个NSURLRequest对象代表一个请求 - 包含信息有:
a.一个NSURL对象
b.请求方法、请求头、请求体
c.请求超时
3>NSMutableURLRequest:
4>NSURLConnection - 负责发送请求,建立客户端与服务器的连接
发送NSURLRequest的数据给服务器,并收来自服务器响应的数据 3.NSURLConnection使用步骤:
1>创建NSURL对象,并设置请求路径
2>传入一个NSURL对象创建NSURLRequest对象,设置请求头和请求体
3>使用NSURLConnection发送NSURLRequest
*/ - (void)viewDidLoad {
[super viewDidLoad]; self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
} - (IBAction)btnlogin { NSString *usernameText = self.textName.text;
if (usernameText.length == ) {
[MBProgressHUD showError:@"请输入账号"];
return;
}
self.textPassword.secureTextEntry = YES;
NSString *password = self.textPassword.text;
if (password.length == ) {
[MBProgressHUD showError:@"请输入密码"];
return;
}
NSLog(@"发送数据给服务器"); /*
接口文档:定义描述服务器端的请求接口
1>请求路径URL:客户端应该请求哪个路径
2>请求参数:客户端要发给服务器的数据
3>请求结果:服务器要返回什么给客户端
*/ //创建一个NSURL:请求路径
NSString *strURL = [NSString stringWithFormat:@"http://localhost:8080/MJServer/login?username=%@&pwd=%@",usernameText,password];
NSURL *url = [NSURL URLWithString:strURL];
//创建一个请求
NSURLRequest *request = [NSURLRequest requestWithURL:url]; //同步请求
[self sendSyncWithRequest:request];
//异步请求
[self sendAsyncWithRequest:request]; }
//异步请求
- (void)sendAsyncWithRequest:(NSURLRequest *)request
{
NSOperationQueue *queue = [NSOperationQueue mainQueue]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//这个block会在请求完毕的时候自动调用
if (connectionError || data == nil) {
[MBProgressHUD showError:@"请求失败"];
return;
}
//解析服务器返回的JSON数据
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];
}
}];
} //同步请求
- (void)sendSyncWithRequest:(NSURLRequest *)request
{
//发送用户名和密码给服务器(HTTP协议)
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
/*
JSON
1>JSON是一种轻量级的数据格式,一般用于数据交互
服务器返回给客户端的数据一般都是JSON格式或者XML格式
标准的JSON合适注意点:key必须用双引号 2>要想从JSON中挖出具体数据得对JSON进行解析
JSON OC
{}-----------NSDictonary
[]-----------NSArray
" "-----------NSString
数字-----------NSNumber 3>JSON解析方案
第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
苹果原生(自带):NSJSONSerialization(性能最好)
4>JSON数据转-->OC对象
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
5>OC对象-->JSON数据
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
*/
//解析服务器返回的JSON数据
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];
} }
@end

IOS-网络(HTTP请求、同步请求、异步请求、JSON解析数据)的更多相关文章

  1. ASIHTTPRequest系列(一):同步和异步请求

    ASIHTTPRequest系列(一):同步和异步请求 发表于8个月前(2013-11-27 19:21)   阅读(431) | 评论(0) 6人收藏此文章, 我要收藏 赞0 ASIHTTPRequ ...

  2. C# ASP.NET Core使用HttpClient的同步和异步请求

    引用 Newtonsoft.Json // Post请求 public string PostResponse(string url,string postData,out string status ...

  3. NSURLConnection同步与异步请求 问题

    NSURLConnection目前有两个异步请求方法,异步请求中其中一个是代理.一个同步方法.有前辈已经详细介绍,见:http://blog.csdn.net/xyz_lmn/article/deta ...

  4. java判断请求是否ajax异步请求

    java判断请求是否ajax异步请求   解决方法: if (request.getHeader("x-requested-with") != null && re ...

  5. Http和Https网络同步请求httpclient和异步请求async-http-client

    原文:https://blog.csdn.net/fengshizty/article/details/53100694 Http和https网络请求 主要总结一下使用到的网络请求框架,一种是同步网络 ...

  6. NSURLConnection和NSMutableURLRequest 实现同步、异步请求

    我是走向ios的一个小书童,我有很多不懂的,新鲜的知识去学习,去掌握! 我首先要吐槽一下: 那些不负责的博友!你分享知识本来是好事!可是你直接Control+V就是你的不对了! 尼玛,直接Contro ...

  7. Swift3.0:Get/Post同步和异步请求

    一.介绍 Get和Post区别: Get是从服务器上获取数据,Post是向服务器发送数据. 对于Get方式,服务端用Request.QueryString获取变量的值,对于Post方式,服务端用Req ...

  8. ASIHTTP 框架,同步、 异步请求、 上传 、 下载

    ASIHTTPRequest详解 ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目.让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度 ...

  9. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第四节:同步与异步请求方式

    前两节,我们对WebRequest和WebResponse这两个类做了介绍,但两者还相对独立.本节,我们来说说如何将两者结合起来,方式有哪些,有什么不同. 1.4.1 说结合,无非就是我们如何发送一个 ...

  10. 普通B/S架构模式同步请求与AJAX异步请求区别(个人理解)

    在上次面试的时候有被问到过AJAX同步与异步之间的概念问题,之前没有涉及到异步与同步的知识,所以特意脑补了一下,不是很全面... 同步请求流程:提交请求(POST/GET表单相似的提交操作)---服务 ...

随机推荐

  1. Solutions for common Android development problems with the Eclipse IDE- Tutorial

    Table of Contents 1. Solving typical Android development problems 1.1. Clean Project 1.2. android.co ...

  2. supervisord部署

    https://blog.csdn.net/vbaspdelphi/article/details/54091095https://blog.csdn.net/shudaqi2010/article/ ...

  3. Mysql5.6主从复制

    搭建(192.168.1.10 -> 192.168.1.20) 1 master 上执行 阻塞 DMLflush tables with read lock; 记录 File 和 Positi ...

  4. 跟我学Makefile(二)

    命令出错: 每当命令运行完后, make 会检测每个命令的返回码,如果命令返回成功,那么 make 会执行下一条命令. 如果一个规则中的某个命令出错了(命令退出码非零),那么 make 就会终止执行当 ...

  5. oracle 查询按月份分组

    如下表table1: 日期(exportDate)               数量(amount) --------------                    ----------- 14- ...

  6. mysql key index区别

    看似有差不多的作用,加了Key的表与建立了Index的表,都可以进行快速的数据查询.他们之间的区别在于处于不同的层面上. Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key), ...

  7. 史上最全的MonkeyRunner自动化测试从入门到精通(2)

    原文地址https://blog.csdn.net/liu_jing_hui/article/details/60955696 最基本脚本功能开始编写 (1)Monkeyrunner和Monkey的区 ...

  8. 7.2 Models -- Defining Models

    一.概述 1. 模型是一个类,它定义了你呈现给用户的数据的属性和行为.用户希望如果他们离开你的应用程序,并返回后(或如果他们刷新页面)看到的任何东西应该被一个model代表. 2. 确保在ember. ...

  9. cocos代码研究(24)Widget子类PageView学习笔记

    理论基础 PageView类又称Layout的管理器,可以让用户在多个Layout之间左右或者上下切换显示,继承自 Layout . 代码实践 static PageView * create ()创 ...

  10. bat笔记

    背景介绍 现入职的公司包含发送EDM的项目,每天都有各种题型邮件需要发送,但是由于各种原因,发送EDM程序的服务器老是被网管各种重启 :) 作为负责人,对这事很恼火,隔几天就被投诉,怎么又没收到考勤邮 ...