ios开发 网络编程HTTP、FTP连接.doc_第1页
ios开发 网络编程HTTP、FTP连接.doc_第2页
ios开发 网络编程HTTP、FTP连接.doc_第3页
ios开发 网络编程HTTP、FTP连接.doc_第4页
ios开发 网络编程HTTP、FTP连接.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.CFHTTP可以使用CFHTTP API创建HTTP请求,通常HTTP请求方法包括GET、HEAD、PUT、POST、DELETE、TRACR、CONNECT和OPTIONS。使用CFHTTP请求一般4个步骤: 使用CFHTTPMessageCreateRequest函数生成一个CFHTTP消息对象 使用CFHTTPMessageSetBody函数设置消息内容 使用CFHTTPMessageSetHeaderFieldValue函数设置消息头 使用CFHTTPMessageCopySerializedMessage序列化消息只有http post 需要消息内容,里面是要提交的表单数据。示例:创建一个http get请求,序列化后的请求应该通过写入流(write stream)发送。CFStringRef requestHeader = CFSTR(Connection);CFStringRef requestHeaderValue = CFSTR(close);CFStringRef requestBody = CFSTR();CFStringRef url = CFSTR(/);CFStringRef requestMethod = CFSTR(GET);CFURLRef requestURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);CFHTTPMessageRef request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, requestURL, kCFHTTPVersion1_1);CFHTTPMessageSetBody(request, requestBody);CFHTTPMessageSetHeaderFieldValue(request, requestHeader, requestHeaderValue);CFDataRef serializedRequest = CFHTTPMessageCopySerializedMessage(request);创建HTTP相应的步骤与创建请求的方法差不多,不同之处是用CFHTTPMessageCreateResponse函数代替CFHTTPMessageCreateRequest。可以使用一个CFReadStream对象来序列化并发送CFHTTP请求。当使用CFReadStream对象时,打开读取流的同时消息会被序列化并发送,这样可以方便地获取响应。如下:CFHTTPMessageRef request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, requestURL, kCFHTTPVersion1_1);CFHTTPMessageSetBody(request, requestBody);CFHTTPMessageSetheaderFieldValue(request, requestHeader, requestHeaderValue);CFReadStreamRef readStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, request);CFReadStreamOpen(readStream);调用CFReadStreamCopyProperty可以从读取流获取响应消息,代码如下:CFHTTPMessageRef response = CFReadStreamCopyProperty(readStream, kCFStreamPropertyHTTPResponseHeader);使用CFHTTPMessageCopyResponseStatusLine函数获得完整的状态行,如下:CFStringRef statusLine = CFHTTPMessageCopyResponseStatusLine(response);或者,使用CFHTTPMessageGetResponseStatusCode函数获取状态码,如下:UInt32 errCode = CFHTTPMessageGetResponseStatusCode(response);为了获取返回的数据,可以使用CFReadStreamSetClient方法设置回调函数,将readStream加到run loop中。在回调函数将每次读取的数据存起来(比如,有一个NSMutableData类型的变量data),读完后处理数据,代码如下:if(kCFStreamEventHasBytesAvailable = eventType)UInt8 buff255;int length = CFReadStreamRead(stream, buff, 254);data appendBytes:buff length:length;if(kCFStreamEventEndEncountered = eventType)/读取已完成,处理读取的数据如果接收数据是中文字符串,注意在创建NSString时选择编码,比如UTF8或GB2312编码,如下所示:NSString *string = NSString alloc initWithData:data encoding:0x80000632;/GB2312编码当使用CFReadStreamCreateForHTTPRequest创建读取流时,流的重定向默认是被禁止的。如果请求连接被重定向,会导致一个错误,它的状态码为300307。如果收到一个重定向错误,需要关闭这个流,然后重新创建一个流,启用重定向并打开流。如下:CFReadStreamRef readStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, request);if(CFReadStreamSetProperty(readStream, kCFStreamPropertyHTTPShouldAutoredirect, kCFBooleanTrue) = false)/出错处理CFReadStreamOpen(myReadStream);2.CFFTPCFFTP也使用CFReadStream来传送FTP数据。使用CFReadStreamCreateWithFTPURL方法来创建FTP请求,这样会同时创建一个CFReadStreamRef对象来读取FTP服务器发送的数据,代码如下:CFStringRef url = CFSTR(/file.txt);CFURLRef requestURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);CFReadStreamRef readStream = CFReadStreamCreateWithFTPURL(kCFAllocatorDefault, requestURL);下一步,使用CFReadStreamSetClient方法设置回调函数来读取数据,然后把readStream加到程序的run loop中。如果FTP需要使用用户名和密码认证,通过CFReadStreamSetProperty方法设置kCFStreamPropertyFTPUserName和kCFStreamPropertyFTPPassword属性。要将文件下载到本地,可以使用CFWriteStreamCreateWithFile方法创建一个指向本地文件的写入流,将接收到的数据写入。上传文件和下载文件差不多,只不过把读取流和写入流反过来用,使用CFWriteStreamCreateWithFTPURL方法创建写入流,使用CFReadStreamCreateWithFile创建读取流。创建远程目录的方法与上传文件类似,只不过将CFURL对象设置一个路径而不是文件。获取目录列表的方法与下载文件类似,数据读取到缓存后使用CFFTPCreateParsedResourceListing,方法对读取进行解析。3.NSURLConnectionCFNetwork是比较底层的接口,虽然用起来比较灵活,但并不好用。多数程序仅仅需要创建简单的请求来获取互联网上的一个文件,那么使用NSURLConnection要更加方便,因为不用跟套接字、流还有回调函数打交道,取而代之的是更熟悉的委托机制。创建一个NSURL对象:NSNRL *url = NSURL URLWithString:/;NSURL对象是用来创建NSURLRequest对象的,如下:NSURLRequest *request = NSURLRequest alloc initWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoadtimeoutInterval:60.0;可选的缓存策略有以下几种。(1)NSURLRequestUseProtocolCachePolicy:使用相关协议默认缓存策略。(2)NSURLRequestReloadIgnoringLocalCacheData: 无论本地缓存是什么,请求都要重新加载数据。(3)NSURLRequestReloadIgnoringLocalAndRemoteCacheData:不仅要忽略本地缓存,在协议允许的情况下也要忽略远程代理或中间件的缓存。(4)NSURLRequestReturnCacheDataElseLoad:优先使用缓存数据,缓存不存在时再去加载请求。(5)NSURLRequestReturnCacheDataDontLoad:只加载缓存数据,缓存中不存在时也不请求,可理解为离线模式。(6)NSURLRequestReloadRevalidatingCacheData: 缓存中的数据没有过期时才加载缓存中的数据,否则请求数据并刷新缓存。创建完NSURLRequest对象后就可以创建NSURLConnection对象了,如下:NSURLConnection *connection = NSRULConnection alloc initWithRequest:request delegate:self;这个是异步调用,NSURLConnection会在后台发送请求,通过设置委托参数,有数据时会收到通知。由一些委托方法来处理连接是过程中的不同事件。当服务主机有响应将要开始发送数据时,didReceiveResponse:方法会被调用。这里可以做一些初始化的工作,比如有一个NSMutableData类型的data对象来存储数据,在这里可以把对象长度设为0,如下所示-(void) connection:(NSURLConnection *)connection didReceiveRespose:(NSURLResonse *)responsedata setLength:0;当接收到数据时,didReceiveData:方法会被调用。这里可以把数据加到NSMutableData对象的后面,如下:- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)incomingDatadata appendData:incomingData;当数据加载完成时会调用connecitionDidFinshLoading:方法,处理传入的数据。这里以字符串处理为例,示例应用中传入的可能是图片或其他任何类型的对象。- (void)connectionDidFinishLoading:(NSURLConnection *)connectionNSString *string = NSString alloc in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论