iOS网络开发基础--发送HTTP请求

一、一个HTTP请求的基本要素

1.请求URL:客户端通过哪个路径找到服务器


2.请求参数:客户端发送给服务器的数据

  • 如登录时需要发送的用户名和密码


3.返回结果:服务器返回给客户端的数据

  • 一般是JSON数据或者XML数据


二、基本的HTTP请求的步骤(移动客户端)

1.拼接"请求URL" + "?" + "请求参数"

  • 请求参数的格式:参数名=参数值
  • 多个请求参数之间用&隔开:参数名1=参数值1&参数名2=参数值2


2.发送请求


3.解析服务器返回的数据

  • JSON解析
  • XML解析

三、HTTP的通信过程

1.请求

1> 请求行 : 请求方法、请求路径、HTTP协议的版本

GET /MJServer/resources/images/1.jpg HTTP/1.1


2> 请求头 : 客户端的一些描述信息

  • User-Agent : 客户端的环境(软件环境)


3> 请求体 : POST请求才有这个东西

  • 请求参数,发给服务器的数据


2.响应

1> 状态行(响应行): HTTP协议的版本、响应状态码、响应状态描述

HTTP/1.1 200 OK


2> 响应头:服务器的一些描述信息

  • Content-Type : 服务器返回给客户端的内容类型
  • Content-Length : 服务器返回给客户端的内容的长度(比如文件的大小)


3> 实体内容(响应体)

  • 服务器返回给客户端具体的数据,比如文件数据


四、HTTP的请求方法

1.GET

1> 特点

  • 所有请求参数都拼接在url后面


2> 缺点

  • url中暴露了所有的请求数据,不太安全
  • url的长度有限制,不能发送太多的参数


3> 使用场合

  • 如果仅仅是向服务器索要数据,一般用GET请求


4> 如何发送一个GET请求

  • 默认就是GET请求

// 1.URL

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

// 2.请求

NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 3.发送请求

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

}];


2.POST

1> 特点

  • 把所有请求参数放在请求体(HTTPBody)中
  • 理论上讲,发给服务器的数据的大小是没有限制


2> 使用场合

  • 除开向服务器索要数据以外的请求,都可以用POST请求
  • 如果发给服务器的数据是一些隐私、敏感的数据,绝对要用POST请求


3> 如何发送一个POST请求

// 1.创建一个URL 请求路径

NSURL *url = [NSURL URLWithString:@"http://xxxxx"];


// 2.创建一个请求

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 设置请求方法

request.HTTPMethod = @"POST";

// 设置请求体 : 请求参数

NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];

// NSString --> NSData

request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];


五、NSMutableURLRequest的常用方法

1.设置超时

request.timeoutInterval = 5;

// NSURLRequest是不能设置超时的,因为这个对象是不可变的


六、URL转码

1.URL中不能包含中文,得对中文进行转码(加上一堆的%)

NSString *urlStr = [NSString stringWithFormat:@"http://localhost/login?username=lisa&pwd=123"];

urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// urlStr == @"http://localhost/login?username=%E5%96%9D%E5%96%9D&pwd=123"


你可能感兴趣的:(网络开发)