您的位置:首页 > 理论基础 > 计算机网络

IOS开发 网络详解(三)--- Http请求报文和响应报文(Get和Post)

guchengfengyun 2017-12-24 02:04 148 查看
HTTP请求报文由请求行,请求头,空格和请求数据构成。



1.请求行由请求方法 空格 请求url 空格 版本 组成

2.请求头由关键字/值组成

常用的由user-Agent:浏览器类型

accept:客户端能识别的类型列表

host:主机名

3.空格:区分不同的部分

4.只用post才有:最常对应的请求头尾content-length,content-type

5.get请求实例

//请求首行
GET /hello/index.jsp HTTP/1.1
//请求头信息,因为GET请求没有正文
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
//空行
//因为GET没有正文,所以下面为空


6.post请求实例

// 请求首行
POST /hello/index.jsp HTTP/1.1
//请求头信息
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://localhost/hello/index.jsp Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
Content-Type: application/x-www-form-urlencoded
Content-Length: 14
// 这里是空行
//POST有请求正文
username=hello


7.URLConnection实现文件上传(注意请求头)

好了先看看这个图,上传文件和普通的POST请求不一样,它多了一些这个,然而这里就有是需要我们拼接的内容,分两部分

上面的Content-Type是在我们的请求头里面的

下面的那些写红色字的就是我们所请求 需要拼接的

至于换多少行,我也一一的拼接出来了,你们拼接的话可以跟着下面的图一步一步拼接.



//1、确定URL
NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"];

//2、确定请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
/******************************************************************/
//                          设置请求头
[request setValue:@"multipart/form-data; boundary=----WebKitFormBoundaryUFNaH6losNxu4xDq" forHTTPHeaderField:@"Content-Type"];

/******************************************************************/
//                          设置请求体
// 设置请求体
// 给请求体加入固定格式数据  这里也是使用的也是可变的,因为多嘛
NSMutableData *data = [NSMutableData data];
/******************************************************************/
//                       开始标记
[data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"Liiii.png\"" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
/******************************************************************/
//                      上传文件参数
//图片数据  并且转换为Data
UIImage *image = [UIImage imageNamed:@"Liiii"];
NSData *imagedata = UIImagePNGRepresentation(image);
[data appendData:imagedata];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
/******************************************************************/
//                       非文件参数
[data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"LitterL" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
/******************************************************************/
//                      添加结束标记
[data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq--" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
/******************************************************************/

//请求方式
request.HTTPMethod = @"POST";
//请求体
request.HTTPBody = data;

//3、发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}];



                                            
标签: