iOS网络编程-http

一、HTTP通信过程

1.HTTP通信过程 - 请求

HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容

请求行:包含了请求方法、请求资源路径、HTTP协议版本

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

请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息

Host: 192.168.1.105:8080 // 客户端想访问的服务器主机地址

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0// 客户端的类型,客户端的软件环境

Accept: text/html, */*// 客户端所能接收的数据类型

Accept-Language: zh-cn // 客户端的语言环境

Accept-Encoding: gzip // 客户端支持的数据压缩格式

请求体:客户端发给服务器的具体数据,比如文件数据

 

 2.HTTP通信过程 - 响应

客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端

HTTP协议规定:1个完整的HTTP响应中包含以下内容:

状态行:包含了HTTP协议版本、状态码、状态英文名称

HTTP/1.1 200 OK

响应头:包含了对服务器的描述、对返回数据的描述

Server: Apache-Coyote/1.1 // 服务器的类型

Content-Type: image/jpeg // 返回数据的类型

Content-Length: 56811 // 返回数据的长度

Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间

实体内容:服务器返回给客户端的具体数据,比如文件数据  


3.iOS中发送HTTP请求的方案

在iOS中,常见的发送HTTP请求(GET和POST)的解决方案有

(1)苹果原生

NSURLConnection:用法简单,最古老最经典最直接的一种方案

NSURLSession:iOS 7新出的技术,功能比NSURLConnection更加强大

CFNetwork:NSURL*的底层,纯C语言

(2)第三方框架

ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新

AFNetworking:简单易用,提供了基本够用的常用功能



4. 不多说,直接上代码:

1. http get 和post 两种调用方式

NSString *retString = nil;

if ([szHttpType isEqualToString:@"GET"]) 

{

    retString = [http httpGet:aUrl queryString:queryString];

else if (!aFiles || [aFiles count] == 0) 

{

    retString = [http httpPost:aUrl queryString:queryString];

2. 对 get 和 post 的简单封装

- (NSString *)httpGet:(NSString *)aUrl queryString:(NSString *)aQueryString 

{

NSMutableURLRequest *request = [self requestGet:aUrl queryString:aQueryString];

return [self getResponseWithRequest:request];

}


- (NSString *)httpPost:(NSString *)aUrl queryString:(NSString *)aQueryString 

{

NSMutableURLRequest *request = [self requestPost:aUrl queryString:aQueryString];

return [self getResponseWithRequest:request];

}


- (NSString *)getResponseWithRequest:(NSURLRequest *)request 

{

NSURLResponse *response = nil;

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

NSString *retString = [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease];

NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

NSLog(@"response code:%d string:%@", httpResponse.statusCode, retString);

return retString;

}


- (NSMutableURLRequest *)requestGet:(NSString *)aUrl queryString:(NSString *)aQueryString 

{

NSMutableString *url = [[NSMutableString alloc] initWithString:aUrl];

if (aQueryString) {

[url appendFormat:@"?%@", aQueryString];

}

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL smartURLForString:url]] autorelease];

[request setHTTPMethod:@"GET"];

[request setTimeoutInterval:20.0f];

[url release];

return request;

}


- (NSMutableURLRequest *)requestPost:(NSString *)aUrl queryString:(NSString *)aQueryString 

{

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL smartURLForString:aUrl]] autorelease];

[request setHTTPMethod:@"POST"];

[request setTimeoutInterval:20.0f];

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

[request setHTTPBody:[aQueryString dataUsingEncoding:NSUTF8StringEncoding]];

return request;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值