您的位置:首页 > 其它

get 和post

2016-02-19 09:28 218 查看
*************

get 和post

请求分好几种请求方式:

最常用的就是get和post

请求:请求头+请求体

get只有请求头

post有请求头和请求体

他俩发请求功能是一样的

请求头是有点不一样的

响应都是一样的

get权限比较低

post可以改变服务器上的一些内容

他俩的重点不太一样 一个在获取 一个在发送上传

get对参数的长度有要求 不能太长 post的参数在请求体中 多长都行

(现在HTTP版本都是1.1)

post会把参数放到请求体里

**********

上传 post

协议:

HTTP 95%

超文本传输协议 面向应用层面

请求+响应 NSURLRquest + NSURLResponse

请求:get + post

get: NSURLRequest 包含请求地址(请求头)

post: 请求头 (URL)+ 请求体(网络请求参数)

NSURLResponse

响应

@interface NSURLResponse : NSObject <</SPAN>NSSecureCoding, NSCopying>

- (long long)expectedContentLength;

资源总大小

- (NSString *)suggestedFilename;

资源名

@interface NSHTTPURLResponse : NSURLResponse

- (NSInteger)statusCode;

状态码

************

只要是get协议 都可以用浏览器测试

get 上传的数据<</SPAN>2k 限制

post:

①数据量大

②安全

post1 :

只能上传文本(字符串) 不能传文件

网站的编码格式:

表单属性enctype

enctype="application/x- www-form-urlencoded".这个属性管理的是表单的编码

application/x-www-form-urlencoded (默认值)

固定写法

GET:

1.创建一个NSURLRequest

2.发起NSURLConnection

POST1:

1.设置HTTP请求方式

2.写字段Content-Type:application/x-www-form-urlencoded

3.写字段Content-Length:请求参数的长度

4.设置请求体

5.发起连接

@interface NSMutableURLRequest : NSURLRequest

- (void)setHTTPMethod:(NSString *)method;

设置HTTP请求方式 POST 默认是GET

- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field;

POST1协议固定写法

[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

[request addValue:[NSString stringWithFormat:@"%d", bodyLen] forHTTPHeaderField:@"Content-Length"];

- (void)setHTTPBody:(NSData *)data;

设置请求体

- (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding)enc;

// Result in O(n) time; the result is exact. Returns 0 on error (cannot convert to specified encoding, or overflow)

NSString 的方法 计算编码后的二进制长度

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding; // External representation

overflow)

NSString 的方法 转换成二进制

post1示例代码:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@my/login.php",SNS_URL]]];

NSData *data = [[NSString stringWithFormat:@"username=%@&password=%@", _name.text, _password.text] dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPMethod:@"POST"];

[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

[request addValue:[NSString stringWithFormat:@"%d", data.length] forHTTPHeaderField:@"Content-Length"];

[request setHTTPBody:data];

[[NSURLConnection alloc] initWithRequest:request delegate:self];

********

post2

上传二进制

post表单就是一个 有特殊格式的二进制串

表单拼接

multipart/form-data ABC123

POST /php/upload_pic.php HTTP/1.1 \r\n

Content-Length : 1234 \r\n

Content-Type : multipart/form-data; boundary=ABC123 \r\n

--ABC123\r\n

Content-Disposition : form-data; name=“action”\r\n

\r\n

upload_pic

\r\n

--ABC123\r\n

Content-Disposition: form-data; name=“pic”; filename=“test.png” \r\n

Content-Type : image/png \r\n (如果是jpg图片 image/jpeg)

\r\n


文件的内容放在这个地方(图片的二进制)


\r\n

--ABC123\r\n Content-Disposition: form-data;

name=“desc”\r\n

\r\n


我的图片


\r\n

--ABC123\r\n Content-Disposition: form-data;

name=“video”; filename=“myvideo.mp4”\r\n Content-Type : video/mp4\r\n


\r\n


Myvideo.mp4二进制内容放在这里

\r\n

--ABC123--\r\n

Content-Disposition: form-data; name=“pic”; filename=“test.png”

Content-Type : image/png \r\n (如果是jpg图片 image/jpeg)

主要设置以上两个

其他每个参数都差不多

很复杂 知道原理就可以 一般直接用asi的第三方库CocoaLigature1

- fno - objc - arc -w

混编

最后一个参数是忽略警告
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: