网络请求 Get & Post 方法(整理)

来源:互联网 发布:销售清单打印机软件 编辑:程序博客网 时间:2024/04/28 23:58
•有两种方法把数据提交给服务器:GET和POST
GET

GET的语义是获取指定URL上的资源
–将数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,各个变量之间使用“&”连接
–不安全,因为在传输过程中,数据被放在请求的URL中
–传输的数据量小,这主要是因为受URL长度限制
POST

POST的语意是对指定资源“追加/添加”数据
–将数据放在数据体中,按照变量和值相对应的方式,传递到action所指向URL
–所有数据对用户来说不可见
–可以传输大量数据,上传文件只能使用Post




  ios 网络处理常用类

NSURL(地址)
–请求地址
NSURLRequest(请求,GET请求使用
–保存需要传送给Web服务器的全部数据:
•一个NSURL对象
•缓存策略
•等待Web服务器响应的最长时间
•请求头
•请求体
NSMutableURLRequest(可请求POST请求使用
–NSURLRequest的可修改子类
NSURLConnection(连接)
–负责创建客户端和Web服务器之间的网络连接、发送NSURLRequest对象中的数据并收集来自服务器的响应

NSURLConnectionDataDelegate的常用代理方法

//服务器开始返回数据

-(void)connection:didReceiveResponse:

// 收到服务器返回的数据,本方法会被调用多次

- (void)connection:didReceiveData:

// 数据接收完毕做数据的最后处理

-(void)connectionDidFinishLoading:

// 网络连接错误

- (void)connection:didFailWithError:

// 发送数据给服务器,POST请求使用此方法

- (void)connection:didSendBodyData:totalBytesWritten: totalBytesExpectedToWrite:



POST请求步骤定义/启动Connection部分省略)




GET请求操作代码


获得服务器数据的准备工作



通过NSURLConnectionDataDelegate代理方法接收数据

// 收到服务器返回数据,本方法会被调用多次

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

{

   NSLog(@"收到服务器返回数据%@",data);

   [_receivedDataappendData:data];

}

// 数据接收结束

- (void)connectionDidFinishLoading:(NSURLConnection*)connection

{

   NSString*string = [[NSStringalloc]initWithData:_receivedDataencoding:NSUTF8StringEncoding];

   

   NSLog(@"接收完毕,返回内容为:%@",string);

   

   //释放数据

      _receivedData =nil;

}

// 网络连接错误

- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error

{

   //取消对URL的编码即可发生错误。

        NSLog(@"网络连接错误:%@", error.localizedDescription);

}



POST请求操作代码

// 初始化接收数据

_receivedData = [NSMutableDatadata];

// 定义URL,字母及数字组成的url不需要编码

NSURL *url = [NSURLURLWithString:LOGIN_URL];

// 定义请求

NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];

// 等待服务器响应的最长时间

[request setTimeoutInterval:5.0];

// 设置请求方法,大小写无关

[request setHTTPMethod:@"post"];

NSString *bodyString = [NSStringstringWithFormat:@”username=%@&password=%@",_userNameText.text,_passwordText.text];

// 生成请求体数据并编码

NSData*body = [bodyString dataUsingEncoding:NSUTF8StringEncoding];

// 设置HTTP请求数据体,NSMutableURLRequest会自动在请求头中加入Content-Length

[requestsetHTTPBody:body];

// 定义连接

……

NSURLConnectionDataDelegate代理方法       

// 发送数据给服务器,POST请求使用此方法

- (void)connection:(NSURLConnection*)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite

{

   NSLog(@“发送数据给服务器bytesWritten:%d,totalBytesWritten %dtotalBytesExpectedToWrite %d”, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);

}


同步请求和异步请求

•NSURLConnection提供了两个静态方法可以直接同步或异步调用NSURLRequest,而无需通过NSURLConnectionDataDelegate获取数据
•同步请求:

sendSynchronousRequest:request returningResponse:&responseerror:&error

•异步请求:

sendAsynchronousRequest:request queue:[NSOperationQueuemainQueue]completionHandler:^(NSURLResponse*response,NSData*data, NSError*error)

有关主操作队列的内容,在多线程课程讲解



0 0
原创粉丝点击