http:get&post方法

 

  在http请求中有两个非常重要的header,分别是get和post。对于百度这类的服务器访问,不需要传递什么参数,方便快捷迅速的访问,大多用的是get。而需要输入账号密码或者传递信息(图片等)的时候,采用的则是post请求。

(一)get:

  get请求可以被缓存。get请求时输入的数据是会显示在“网址”上的,通常?后面键值的方式追加参数,多个参数由&连接。并且参数一般不会有中 文,如果有中文,则需要进行添加百分号转义。str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];在http协议 中,没有明确的规定get的长度。不过根据浏览器不同,一般都在2-8k之间。

 

 1 - (void)get{
 2     
 3     NSString *str = @"http://127.0.0.1/login.php?username=zhangsan&password=zhang";
 4     
 5     str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 6     
 7     NSURL *url = [NSURL URLWithString:str];
 8     
 9     
10     NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:10.0];
11     
12     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
13         
14         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
15         
16         NSLog(@"%@",dict);
17         
18     }];
19     
20 }

 

(二)post:

    post多为向服务器发送一些重要数据,效率不如get,并且无法被缓存。例如提交加密后的账号密码或者一些其他数据。提交数据的大小依照服务器的规则。 post的参数是单独由一个请求体包裹着。发送到服务器后服务器根据请求体来选择传递的数据(请求体是二进制数据)。

 

 1 - (void)post{
 2     
 3     NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/login.php"];
 4     
 5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:10.0];
 6     request.HTTPMethod = @"post";
 7     request.HTTPBody = [@"username=zhangsan&password=zhang" dataUsingEncoding:NSUTF8StringEncoding];
 8     
 9     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
10         
11         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
12         
13         NSLog(@"%@",dict);
14         
15     }];
16     
17 }

 

(三)百度进行一次请求:

  粘贴地址后发现是这样的-->

  https://www.baidu.com/s?wd=%E6%88%91%E7%9A%84%20%E4%B8%96%E7%95%8C

这是因为get方法自己是ASC的,对中文进行转义了。其中20%就是一个特殊的空格转义字符。

然后监视下这一次百度的请求。

 

  在响应头中-->

 

 

  这个tyoe就是遵守的编码和一些规则。

 

  在请求头中-->

 

  user-agent显示着当前接收的设备,编号。如果改成手机端,那么百度则显示的是m百度的手机样式。

 

(四)服务器发送post请求

 

  可以看到解析是json,编码是utf-8,接收设备是mac OS

 

 

  并且此时还有一个请求体,请求体搭载着传输给服务器端的数据(这个数据通常是要加密的)

 

 

 

 

  在json中还能看到解析结果:(json对应的键值对)

 

 

由此可见,网络数据通常可以通过抓取的方式得到一些头尾信息,然后通过oc代码来实现。

  

 

 

posted @ 2015-07-20 23:01  珍妮是谁  阅读(357)  评论(0编辑  收藏  举报