网络解析

请求方式 :

1. GET

(1) 通过网址字符串给服务器传输数据

(2) 传输数据网址字符串最大255字节

(3) 安全性 : 所有传输给服务的数据, 显示在网址里, 类似于密码的铭文输入, 直接可见

2. POST

(1) 通过data给服务器传输数据

(2) 传输数据使用NSData,容量超过1G

(3) 数据被转成NSData ( 二进制数据 ),类似于密码的密文输入, 无法直接读取

同步GET 和 同步 POST 异同

同步GET :

1. 创建一个地址字符串, 注意 : 不能有空格

2. 创建一个统一资源定位符

3. 创建一个NSURLRequest, 并配置缓存策略和超时时间

4. 通过一个NSData对象获取网络请求数据

同步POST :

1. 创建一个地址字符串, 注意 : 不能有空格

2. 创建一个统一资源定位符

3. 使用NSMutableURLRequest :  因为之后要对request做修改

4. 创建一个上传数据的字符串, 并且转成NSData对象

5. 设置请求方式

6. 设置上传的Data

7. 通过一个NSData对象获取网络请求数据

缺点 : 会造成程序的卡顿, 所以在开发时候不推荐使用 !

-- 代码实现 同步 异步 GET POST (代理 , block 两种方式 (推荐使用 block) )

#import "ViewController.h"

@interface ViewController ()<NSURLConnectionDataDelegate>

@property (nonatomic, strong) NSMutableData *resultData;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
//get同步
// 开发中 不推荐使用同步网络请求
- (IBAction)getT:(id)sender {
    //地址字符串
    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    //统一资源定位符(URL)
    NSURL *url = [NSURL URLWithString:urlString];
    // 第一个参数 : 统一资源定位符
    // 第二个参数 : 缓存策略
    // 第三个参数 : 超时时间
    /**
     NSURLRequestUseProtocolCachePolicy : 基础缓存策略

    *常用 NSURLRequestReloadIgnoringLocalCacheData : 忽略本地缓存

     NSURLRequestReloadIgnoringLocalAndRemoteCacheData : 忽略本地缓存, 无论本地是都有缓存, 都从网络下载

     NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData : 如果本地缓存有效, 则不下载, 无效则去下载

    *常用 NSURLRequestReturnCacheDataElseLoad : 优先的使用本地缓存, 如果本地没有缓存, 则去下载

     NSURLRequestReturnCacheDataDontLoad : 从不下载, 只使用本地缓存, 如果没有则请求失败. 多用于离线环境

    *最常用 NSURLRequestReloadRevalidatingCacheDataUnimplemented : 验证本地数据和网络数据是否相同, 如果不同, 则去下载, 如果相同, 则使用本地数据

     */
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0f];

    //NSURLConnection 在iOS9.0之后 不推荐使用
    // 第一个参数 : NSURLRequest类型的对象
    // 第二个参数 : 存储的是一些网略请求的信息, 一般为nil(包体)
    // 第三个参数 : 错误信息
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

    NSLog(@"dic == %@", dic);
}
//post同步
- (IBAction)postT:(id)sender {
    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";

    NSURL *url = [NSURL URLWithString:urlString];

    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
    //创建一个字符串
    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    //把这个字符串转换成NSData类型的对象
    NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
    //设置请求方式 方式为大写的 如 : POST GET
    //GET请求可以不设置, 但是POST请求必须要设置
    [urlRequest setHTTPMethod:@"POST"];
    //把需要上传的data放进request里面
    [urlRequest setHTTPBody:postData];

    NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil];
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"dic == %@", dic);
}
//get异步
- (IBAction)getY:(id)sender {
    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";

    NSURL *url = [NSURL URLWithString:urlString];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    //代理的异步网络请求 (GET)
    //第一个参数 : NSURLRequest
    //第二个参数 : 代理人
    [NSURLConnection connectionWithRequest:request delegate:self];

    //调回带有block回调的方法, 执行网络请求
    // 第一个参数 : NSURLRequest
    // 第二个参数 : block块里面的代码在哪个线程执行
//    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//
//        //response 携带的是接口的一些信息
//        //data 请求下来的数据, 需要使用的
//        //connectionError 错误信息
//        if (connectionError == nil) {
//            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//            NSLog(@"dic == %@", dic);
//            //这里应该刷新UI了
//            //1. 给数据源数组赋值
//            //2. 赋值结束之后, 刷新UI ([self.tableView reloadData])
//        }
//    }];

}

//post异步
- (IBAction)postY:(id)sender {

    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
    NSURL *url = [NSURL URLWithString:urlString];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:postData];

    [NSURLConnection connectionWithRequest:request delegate:self];

//    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
//    NSURL *url = [NSURL URLWithString:urlString];
//    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
//    NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
//    [request setHTTPMethod:@"POST"];
//    [request setHTTPBody:postData];
//
//    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//        if (connectionError == nil) {
//            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//            NSLog(@"dic == %@", dic);
//        }
//    }];

}

#pragma mark - NSURLConnectionDataDelegate
// 服务器开始响应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    // 初始化保存结果的data
    self.resultData = [NSMutableData data];

}

// 接收到数据
// 这个方法会重复的执行, 所以可能拿到一段一段的数据. 这就需要我们把这些数据拼接起来
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // 为了防止 拿到的数据不全, 所以把拿到的数据拼接到保存结果的data中.
    [self.resultData appendData:data];

}

// 结束响应
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];

    NSLog(@"dic == %@", dic);
    // 更新数据源数组
    //刷新UI

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-11-13 09:40:02

网络解析的相关文章

IOS 网络解析

网络解析同步异步 /*------------------------get同步-------------------------------------*/ - (IBAction)GET_TB:(id)sender { //1.创建url NSURL *url = [NSURL URLWithString:@"http://project.lanou3g.com/teacher/yihuiyun/lanouproject/activitylist.php"]; //2.创建一个请求

android中的网络解析xml,json,html框架

android中网络请求回来数据之后,我们要对其解析.请求的返回的结果格式如果不是自定义协议:那么返回的数据通常是xml,json,html形式的数据了. 下面就是针对上面3种格式进行解析. xml解析使用工具:在android中推荐使用pull解析,还有其他的dom,sax解析. json解析使用工具:推荐使用Fastjson,由阿里提供.还有其他的如JackSon,Gson解析. html解析使用工具:推荐使用Jsoup,还有其他的如HtmlParser;关于使用这个,网络上的爬虫就是这样子

网络解析 get 和post

//get同步 - (IBAction)getT:(id)sender { //准备一个Url NSURL *url=[NSURL URLWithString:BASE_URL]; //创建一个请求对象 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url]; //选择请求方式 [request setHTTPMethod:@"GET"]; //创建响应对象 NSURLResponse *respons

《极客学院 --AFNetworking 2.x 网络解析详解--1》学习笔记

网络请求的基本知识   我们网络请求用的是HTTP请求 Http请求格式:请求的方法,请求头,请求正文 Http请求的Request fields:请求的头部,以及被请求头部的一些设置 Http请求的Response fields:请求的回复头,通过回复头可以了解服务器给我们的一些状态信息. 项目源码:链接: http://pan.baidu.com/s/1i37yGzN 密码: kw6s 获取这个源码后,解压后直接拖拽进新建的Single View工程:

hourglassnet网络解析

hourglassnet中文名称是沙漏网络,起初用于人体关键点检测,代码,https://github.com/bearpaw/pytorch-pose 后来被广泛的应用到其他领域,我知道的有双目深度估计,关于双目深度估计,自己最近会写一篇blog,这里先简单介绍一下.双目深度估计第一次用hourglassnet是在psmnet(https://github.com/JiaRenChang/PSMNet)中使用的的,后来的很多双目深度估计的工作也有很多继承这种hourglass的使用方法,比如g

GET/POST请求的使用《极客学院 --AFNetworking 2.x 网络解析详解--2》学习笔记

AFNetworking是开源代码排名第一的开源库. GET请求的请求正文 一般都是明文显示的,携带的数据量小. POST用于处理复杂的业务,并不用明文的请求,其实POST请求可以携带更多的参数,只是不明文显示,所以我们在有的时候,有的网址你是看不到GET请求的网址有?已经?后面携带的明文请求数据. 抓包工具:网址:http://www.cnblogs.com/YouXianMing/p/4544824.html 测试的网址: // http://webservice.webxml.com.cn

网络解析json

public class myActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void buooo(View v) throws Exception{ new Thread(){ public v

网络解析xUtils

/** * 使用xUtils实现GET请求 * */ private void getExpressionForGet(){ //xUtils 基于HttpClient的 HttpUtils httpUtils = new HttpUtils(5000); httpUtils.send(HttpRequest.HttpMethod.GET, "http://v.juhe.cn/WNXG/city?key=3c7900adf363b38a0201ffebda71e95a", new Re

Forefront TMG 2010 篇(八)--允许内部网络解析本地主机的Netbios名称

不知有没有细心的发觉,上文提到的代理都是使用 IP 地址的,如果改用TMG的本地计算机名时,它会不能正常的使用,所以我们要在 TMG 上面添加 一个防火墙规则,允许内网中本地的计算机可以正常的解释,操作如下: 1.防火墙策略>>>右键>>>新建>>>>访问规则. 2.在弹出的窗口中,访问规则名称.这个名称可以随便起 3.这里要记住要选择   允许 4.重点来啦:  添加>>>>结构>>>>netbi