HTTP协议

来源:互联网 发布:服装商品数据分析报表 编辑:程序博客网 时间:2024/05/18 11:37




HTTP协议的基本概念
 
全称“超文本传输协议”,浏览器和服务器之间的通信规则
HTTP协议永远都是客户端发起请求,服务器回送响应。




请求方式


用户在发送请求消息时,又可以分为多种不同的请求方式。比较常见的请求方式是“get”和“post”请求


“get”请求:是向服务器索取数据的一种请求方式


“post”请求:是向服务器提交数据的一种请求方式,如“用户登陆”等等






HTTP请求
 


Http请求主要由两部分组成:http请求头、http请求体




POST请求才有请求体






请求的参数有两种形式:1.放在URL后面,2.放在请求体中
 


URL: http://weibo.com/mechenwei?page=1&pagesize=20






HTTP请求头:
Accept: text/html,application/xhtml+xml,application/
xml;q=0.9,*/*;q=0.8
Accept-Charset: GBK,utf-8;
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;
Connection:    keep-alive
....
....






HTTP请求体:
userName=scsys&password=scsys2805














HTTP响应






HTTP响应主要由两部分组成:响应头、响应内容






HTTP响应有个状态码,标示响应的结果,例如200表示成功,404未找到页面
 






HTTP响应头:
Cache-Control:no-cache, must-revalidate
Connection:close
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Thu, 10 Jan 2013 02:41:29 GMT
DPOOL_HEADER:alice82
....
....


HTTP响应体:
{username:”wxhl”,success:true};






打开 课件中的 HTTP Client.app   输入 http://www.baidu.com


                                method:选择 get


在下面Header Name 与  Header Value中可以设置  对应的请求头


         点击 send




  点击 Response 查看返回结果






   可以把内容拷贝到一个网页文档中 直接运行




   method:选择 post 


      点击 send   测试 




   Header Name 与  Header Value中可设置    Accept-Language:en


   在 Body 中加入   userName=scsys&password=123456             也可以传递 json/xml数据格式




      点击 send   测试 






3、访问网络的基本概念




访问网络的方式
 
同步请求: 数据的请求过程是在主线程来执行的。网络数据加载需要一个时间过程,这样的话就会堵塞主线程。




异步请求:数据的请求过程在多线程来执行。
同步请求无法取消,异步请求过程中可以取消。同步请求无法监听加载进度,异步可以监听。






访问网络的基本流程
 




基本流程
 
构造NSURL实例(地址)


生成NSURLRequest请求


通过NSURLConnection发送请求


通过返回NSURLRespond实例和NSError实例分析结果


接受返回数据












NSURL释义与常用方法
 




NSURL释义
 
NSURL实例包装了一个地址信息,可以是本地地址,也可以是远程地址
 


常用方法
 


// 初始化URL实例
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"];
 


NSLog(@"Scheme: %@", [url scheme]);// http
NSLog(@"Host: %@", [url host]);// www.baidu.com
 


NSLog(@"absoluteString : %@",[url absoluteString]);//http://www.baidu.com:8080/search?id=1
NSLog(@"relativePath : %@", [url relativePath]);  // /search
NSLog(@"Port: %@", [url port]);// 8080
NSLog(@"Path: %@", [url path]);// /search
 
NSLog(@"pathComponents : %@", [url pathComponents]); // "/",search
 
NSLog(@"Query: %@", [url query]);//id=1
 








NSURLRequest的释义
 


NSURLRequest的使用
 
NSURLRequest 包装了网络请求的信息。


NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"];


// cachePolicy 缓存策略 timeoutInterval 超时时间
NSURLRequest *request = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60];














NSURLRequest的使用
 




NSMutableRequest的使用
 
相对于NSRequest实例,NSMutableRequest实例可以对请求信息重新设置
 


示例:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];




[request setURL:url];
// 设置请求方式
[request setHTTPMethod:@"POST"];
// 设置超时时间
[request setTimeoutInterval:60];
// 设置请求参数
[request setHTTPBody:_data];
// 设置请求头
[request setValue:@"tttt" forHTTPHeaderField:@"cookes"];










同步请求用法
 




同步请求
 




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


// 创建一个请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];


NSURLResponse *response;


// 发送同步请求,请求成功后返回数据


NSData *resultData = [NSURLConnection sendSynchronousRequest:request


returningResponse:&response


error:nil];


NSString *dataString = [[NSString alloc] initWithData:resultData


encoding:NSUTF8StringEncoding];


self.resultText.text = dataString;












异步请求用法
 


第一种方式
 
NSURL *url = [NSURL URLWithString:request_url];


NSURLRequest *request = [NSURLRequest requestWithURL:url];


// 发送异步请求


[NSURLConnection connectionWithRequest:request delegate:self];


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData


*)data {


[_data appendData:data];


} // 接受加载的数据


- (void)connectionDidFinishLoading:(NSURLConnection *)connection {


NSString *dataString = [[NSString alloc] initWithData:_data


encoding:NSUTF8StringEncoding];


self.resultText.text = dataString;


} // 数据加载完以后调用












异步请求


第二种方式(开辟一个子线程)
 


- (IBAction)asychroRequest:(id)sender {
[self performSelectorInBackground:@selector(loadData)
withObject:nil];
} // 启动一个新的线程加载数据








- (void)loadData {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSURL *url = [NSURL URLWithString:request_url];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLResponse *response = nil;
// 发送同步请求
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:nil];
NSString *stringData = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
[self performSelectorOnMainThread:@selector(afterLoadData:)
withObject:stringData waitUntilDone:NO];
[pool release];
}








取消异步请求
 
发送cancel取消请求,注意同步无法取消。



0 0