HTTP请求的常见方法

  • GET

    • 所有参数拼接在URL后面,并且参数之间用&隔开

      • 比如http://520it.com?name=123&pwd=345
      • 传递了2个参数给服务器
        • name参数:123
        • pwd参数:345
    • 没有请求体
    • 一般用来查询数据
  • POST
    • 所有参数都放在请求体
    • 一般用来修改、增加、删除数据

创建HTTP请求

  • GET
// 请求路径
NSString *urlString = @"http://520it.com?name=张三&pwd=123";
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // 创建URL
NSURL *url = [NSURL URLWithString:urlString]; // 创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 设置请求方法(默认就是GET请求)
request.HTTPMethod = @"GET";
  • POST
// 请求路径
NSString *urlString = @"http://520it.com/图片";
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // 创建URL
NSURL *url = [NSURL URLWithString:urlString]; // 创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 设置请求方法
request.HTTPMethod = @"POST"; // 设置请求体
request.HTTPBody = [@"name=张三&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];

使用NSURLConnection发送HTTP请求

发送同步请求

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
// 这个方法是阻塞式的,会在当前线程发送请求
// 当服务器的数据完全返回时,这个方法才会返回,代码才会继续往下执行

发送异步请求-block

+ (void)sendAsynchronousRequest:(NSURLRequest*) request
queue:(NSOperationQueue*) queue
completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;
// 会自动开启一个子线程去发送请求
// 当请求完毕(成功\失败),会自动调用handler这个block
// handler这个block会放到queue这个队列中执行

发送异步请求-delegate

  • 创建NSURLConnection对象
// startImmediately==YES,创建完毕后,自动发送异步请求
- (instancetype)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately;
- (instancetype)initWithRequest:(NSURLRequest *)request delegate:(id)delegate; // 创建完毕后,自动发送异步请求
+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate; // 创建完毕后,自动发送异步请求
  • 发送请求
[connection start];
  • 遵守NSURLConnectionDataDelegate协议,实现协议中的代理方法
// 当接收到服务器的响应时就会调用
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; // 每当接收到服务器返回的数据时就会调用1次(数据量大的时候,这个方法就会被调用多次)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; // 当服务器的数据完全返回时调用(服务器的数据接收完毕)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection; // 当请求失败的时候调用
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
  • 取消请求
[connection cancel];

NSString和NSData的互相转换

  • NSString -> NSData
NSData *data = [@"520it.com" dataUsingEncoding:NSUTF8StringEncoding];
  • NSData -> NSString
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  //发送请求给服务器,加载右侧的数据
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"a"] = @"list";
params[@"c"] = @"subscribe";
params[@"category_id"] =@(c.id);
[[AFHTTPSessionManager manager] GET:@"http://api.budejie.com/api/api_open.php" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
//字典转模型数组
NSArray *users = [XJQRecommendUser objectArrayWithKeyValuesArray:responseObject[@"list"]]; //添加当前类别对应的用户组
[c.users addObjectsFromArray:users];
//刷新表格
[self.detailVC reloadData]; } failure:^(NSURLSessionDataTask *task, NSError *error) {
[SVProgressHUD showErrorWithStatus:@"加载数据失败"];
}];

iOS边练边学--NSURLConnection发送HTTP请求以及NSString和NSData的相互转换的更多相关文章

  1. NSURLConnection发送GET请求

    // ViewController.m // 04-掌握-NSURLConnection发送GET请求 // // Created by xiaomage on 16/2/22. // Copyrig ...

  2. iOS边练边学--Http网络再学习,简单介绍

    一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS ...

  3. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

  4. iOS边练边学--CALayer,非根层隐式动画,钟表练习

    一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性 ...

  5. iOS边练边学--UIGestureRecognizer手势识别器简单介绍

    iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...

  6. iOS边练边学--触摸事件以及能够拖拽的UIView的练习

    一.用户在使用APP的过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: 二.响应者对象 在iOS中只有继承了了UIResponder的对象才能接受并处理事件,这样的对象称之为“响应者对象 ...

  7. iOS边练边学--应用数据存储的常用方式(plist,Preference,NSKeyedArchiver)其中的三种

    iOS应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3--这里暂且不讲 Core D ...

  8. iOS边练边学--通知机制和键盘处理小练习

    一.发送通知 NSNotification *note = [NSNotification notificationWithName:@"通知的名称,随便写,例如:你妈叫你回家吃饭" ...

  9. iOS边练边学--图片的拉伸

    图片拉伸方法一: IOS 5.0以后才有的方法: - (void)viewDidLoad { [super viewDidLoad]; UIImageView *imageView = [[UIIma ...

随机推荐

  1. 边工作边刷题:70天一遍leetcode: day 74

    Binary Tree Upside Down 要点: recursion反转如何做?两个要点,一是在递归之后反转link(因为先要通过原来的link到下一层),二是要一层层把最底层的root返回来. ...

  2. 翻译《Writing Idiomatic Python》(二):函数、异常

    原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...

  3. codeforces 484B B. Maximum Value(二分)

    题目链接: B. Maximum Value time limit per test 1 second memory limit per test 256 megabytes input standa ...

  4. Web前端研发工程师编程能力飞升之路

    今天看到这篇文章.写的非常有意思,于是转载了.看看我们都处于什么的阶段. [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着 ...

  5. POJ 1442 Black Box -优先队列

    优先队列..刚开始用蠢办法,经过一个vector容器中转,这么一来一回这么多趟,肯定超时啊. 超时代码如下: #include <iostream> #include <cstdio ...

  6. 转:CentOS设置时区

    from: http://os.51cto.com/art/201004/192805.htm 建议直接使用: 1. session 临时修改查看: tzselect. 然后数字键入,回车 2. 永久 ...

  7. tp空操作和空控制器处理

    TP框架几个重要文件:index.php,ThinkPHP.php,Library/Think/Think.class.php,Library/Think/App.class.php,conversi ...

  8. iOS下使用SHA1WithRSA算法加签源码

    首先了解一下几个相关概念,以方便后面遇到的问题的解决: RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字.算法基于一个数 ...

  9. 房产企业如何借助K2 BPM脱颖而出?

    点击这里,查看完整版房地产行业的流程管理解决方案.

  10. win7(X64)+VS2013+OpenCV3.1环境配置

    &1 源文件 VS2013: 链接:http://pan.baidu.com/s/1o8EKQq2 密码:open OpenCV3.1:  链接:http://pan.baidu.com/s/ ...