天天看点

iOS网络编程2-http请求

1:先了解URL

 url的全称是uniform resource locator,即统一资源定位符

通过一个url ,能找到互联网上唯一的1个资源

URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL。

URL的基本格式=协议://主机地址/路径

如http://www.baidu.com

协议:不同的协议,代表着不同的资源查找方式、资源传输方式

主机地址:存放资源的主机的iP地址(域名)

路径:资源在主机中的具体位置

URL中常见的协议:

HTTP

超文本传输协议,访问的是远程的网络资源,格式是http://

http协议是网络开发中最常用的协议

file

访问的是电子邮件地址,格式是file://(不用加主机地址)

mailto

访问的是电子邮件地址,格式是mailto:

FTP

访问的是共享主机的文件资源,格式是ftp://

2、HTTP协议简介:

不管是移动客户端还是pc端,访问远程的网络资源经常使用http协议

那下面我们应该想想这些问题:

客户端该传什么格式的数据给服务器,服务器才能看懂;

服务器该返回什么格式的数据给客户端,客户端才能看懂;

两边要怎样传输数据才能有效沟通?

这时候HTTP协议就发挥作用了

HTTP的全称是hypertext transfer protlcol,即超文本传输协议

规定客户端和服务器之间的数据传输格式

让客户端和服务器能有效地进行数据沟通

http协议的特点:

简单快速,灵活(允许传输任意类型的数据)

HTTP0.9和1.0使用非持续连接

限制每次连接只处理一个请求,服务器和客户端的请求作出响应后,马上断开连接,可以节省传输时间。

HTTP基本通信过程:

  请求:客户端向服务器索要数据

  响应:服务器返回客户端相应的数据

3.iOS中发送HTTP请求的方案:

苹果自带的:

NSURLConnection:用法简单,最古老最经典最直接的一种方案

NSURLSession:比NSURLConnection更加强大

CFNetwork:NSURL *的底层,纯c语言

第三方框架:

ASIHttpRequest:外号“HTTP”终结者,功能极其强大,可惜早已停止更新

AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多

MKNetworkKit:简单易用,产自三哥的故乡印度,维护和使用者少

注:为了提高开发效率,企业开发用的基本是第三方框架

4.NSURLConnection

其常用的类为:

NSURL:请求地址

NSURLRequest:一个NSURLRequest对象就代表一个请求,包含的信息有:一个NSURL对象,请求方式、请求头和请求体,请求超时。。。

NSURLConnection:负责发送请求,建立客户端和服务器的连接;发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据。

NSURLConnection使用步骤:

》1创建一个NSURL对象,设置请求路径

》2传入NSURL创建一个NSURLRequest对象,设置请求头和请求体

》3使用NSURLConnection发送NSURLRequest

5.使用NSURLConnection来进行一个举例

1: 新建一个项目

2:在故事版中拖几个控件:

iOS网络编程2-http请求
<span style="font-size:18px;">3:在ViewController.m的代码如下:</span>
           
<pre name="code" class="objc"><span style="font-size:18px;">#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *username;
@property (weak, nonatomic) IBOutlet UITextField *pwd;
- (IBAction)login;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    }

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
   
}

//点击空白地方,退下键盘
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}

/**
 *  显示错误信息
 *
 *  @param errorMsg 错误信息的内容
 */
- (void)showError:(NSString *)errorMsg
{
    // 1.弹框提醒
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"登录失败" message:errorMsg delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
    [alert show];
    
    
}

- (IBAction)login {
    
    // 1.验证用户名
    NSString *usernameText = self.username.text;
    if (usernameText.length == 0) {
        [self showError:@"请输入帐号"];
        return;
    }
    
    // 2.验证密码
    NSString *pwdText = self.pwd.text;
    if (pwdText.length == 0) {
        [self showError:@"请输入密码"];
        return;
    }
    
    /**
     去公司后应该是有一个接口文档
     
     接口文档:定义描述服务器端的请求接口
     1> 请求路径URL:客户端应该请求哪个路径
     http://localhost/jiaxiao/login
     2> 请求参数:客户端要发给服务器的数据
     * username - 用户名
     * pwd - 密码
     
     3> 请求结果:服务器会返回什么东西给客户端
     */
    
     
    //3.发送用户名和密码给服务器
    
        //创建一个url:请求路径
    NSString *urlStr = [NSString stringWithFormat:@"http://localhost/jiaxiao/login?username=%@&pwd=%@",usernameText, pwdText];
    
    NSURL *url = [NSURL URLWithString:urlStr];

       //创建一个请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
       //返回的数据
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSLog(@"%@", data);
    
}
@end
</span>
           
<span style="font-size:18px;">这个程序说明了如何向服务器发送请求,并接受服务器返回的数据,后续我们将讲解如何解析服务器返回的数据,即data</span>