Post同步异步

// 以下使用 post
网址与数据分隔开
#define kNewsListURL @ "http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"
#define kNewsListParam @
"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213"

//代理方法所需要的协议
@interface PostViewController ()< NSURLConnectionDelegate , NSURLConnectionDataDelegate >
//声明一个链接属性  方便在dealloc中使用
@property ( nonatomic , retain ) NSURLConnection *connection;
//声明一个可变data 用于存放数据
@property ( nonatomic , retain ) NSMutableData *receiveData;

- (void)dealloc
{
    [
_connectioncancel];
    [
_connectionrelease];
    [
_receiveDatarelease];
    [
superdealloc];
}
-----------------------------------------------------------------------
//Post同步
// 1.创建网址对象(没中文就不必转编码)
   
NSURL *url = [NSURL URLWithString:kNewsListURL];
   
   
// 2.利用网址对象 创建请求
   
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
   
   
//设置标识
    [request
setHTTPMethod:@"Post"];
   
   
//把字符串转化成data使用UTF-8的编码格式(携带的请求体)
   
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
   
   
//注意区别: post请求可以携带一个请求体
    [request
setHTTPBody:data];
   
   
//创建同步链接
   
NSData *newData = [NSURLConnection sendSynchronousRequest:request
returningResponse
:nil error:nil];
   
   
//解析数据
   
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:newData options:(NSJSONReadingMutableContainers) error:nil];
    NSLog(@"%@",dataDic);
-----------------------------------------------------------------------
Post异步请求
 //获取网址对象
   
NSURL *url = [NSURL URLWithString:kNewsListURL];
   
//利用网址对象创建一个请求
   
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
   
//创建标识
   
//注意:post请求需要添加标识符
    [request
setHTTPMethod:@"post"];
   
   
//给这个请求添加请求体
   
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
    [request
setHTTPBody:data];
   
//利用请求创建一个链接 (异步代理方法)
-----------------------------------------------------------------------
#pragma mark -- block 方法
    [ NSURLConnection sendAsynchronousRequest :request queue :[ NSOperationQueue mainQueue ] completionHandler :^( NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
       
    }];   

-----------------------------------------------------------------------
   self.connection = [NSURLConnection connectionWithRequest:requestdelegate:self];
    [self.connectionstart];




-----------------------------------------------------------------------
#pragma mark --代理方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
   
//链接成功时创建data
   
self.receiveData = [NSMutableData data];
}

- (
void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
   
//拼接data
    [
self.receiveData appendData:data];
}


- (
void)connectionDidFinishLoading:(NSURLConnection *)connection
{
   
//解析数据
   
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:self.receiveData options:(NSJSONReadingMutableContainers) error:nil];
   
NSLog(@"%@",dataDic);

}

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

UI第十六天 16-NSURLRequest

### 回答1: VB中的POST请求可以分为同步和异步两种方式。 同步请求:同步请求指的是在发送请求后,直到获取到服务器返回的响应后才会继续执行后面的代码。在VB中,我们可以使用HttpWebRequest类来发送同步POST请求。具体步骤如下: 1. 创建HttpWebRequest对象:使用HttpWebRequest的Create方法创建一个HttpWebRequest对象。 2. 设置请求方法和URL:通过修改HttpWebRequest的Method属性为"POST",并设置请求URL。 3. 设置请求参数:可以通过修改HttpWebRequest的ContentLength属性来指定请求参数的长度,并通过GetRequestStream方法获取请求流,将请求参数写入到请求体中。 4. 发送请求并获取响应:使用HttpWebRequest的GetResponse方法发送请求,并使用GetResponseStream方法获取响应流。 5. 解析响应结果:根据响应流的内容进行相应的操作。 异步请求:异步请求指的是发送请求后,不会阻塞代码的执行,而是继续执行后面的代码。在VB中,我们可以使用HttpClient类来发送异步POST请求。具体步骤如下: 1. 创建HttpClient对象:使用New关键字创建一个HttpClient对象。 2. 设置请求参数:可以使用HttpContent类的派生类来设置请求参数,比如StringContent、ByteArrayContent等。 3. 发送请求并获取响应:使用HttpClient的PostAsync或Post方法发送异步POST请求,获取一个表示响应的Task对象。 4. 处理响应结果:可以通过Task对象的Result属性来获取响应结果。 通过上述介绍,我们可以发现同步请求是在等待服务器响应时阻塞代码执行,而异步请求是在发送请求后继续执行后续代码,不会阻塞。在实际应用中,我们可以根据需求选择适合的请求方式。 ### 回答2: 在VB中,POST请求可以通过以下两种方式进行处理:同步和异步。 同步请求是指当发送POST请求后,程序会一直等待服务器响应并处理完毕后才会继续执行后续代码。这种方式适用于对请求的响应时间要求不高的情况,可以让程序按照一定的顺序执行。 在VB中使用同步方式发送POST请求,可以通过创建一个`WebRequest`对象,设置请求的URL和方法POST,然后通过`GetResponse`方法发送请求并等待响应。接收到响应后,可以通过`ResponseStream`读取响应的数据并进行处理。 异步请求是指发送POST请求后,程序不会阻塞等待响应,而是继续执行后续代码。这种方式适用于对请求的响应时间要求较高或需要同时发送多个请求的情况,可以提高程序的性能和并发处理能力。 在VB中使用异步方式发送POST请求,可以通过创建一个`WebRequest`对象,设置请求的URL和方法POST,然后通过`BeginGetResponse`方法发送请求并立即返回。之后可以注册一个回调函数,在响应返回后被调用,通过`EndGetResponse`获取响应并进行处理。 需要注意的是,在使用异步方式发送POST请求时,需要考虑线程安全和同步问题,适当使用锁、事件等机制来确保代码的正确执行。 无论是同步还是异步方式,都可以在发送POST请求时,通过设置请求的参数、请求头信息等来灵活地满足不同的需求,并根据响应的内容进行适当的处理。 ### 回答3: 在VB中,POST请求可以同步或异步执行。 同步POST请求是指请求发出后,程序会一直等待服务器返回响应后再继续执行后续代码。通常使用`WebClient`类来执行同步POST请求。可以使用`UploadString`或`UploadData`方法来发送POST请求,并且会返回服务器响应的字符串或字节数组。 以下是一个使用`WebClient`类发送同步POST请求的示例代码: ```vb Imports System.Net Imports System.Text Public Class Program Public Shared Sub Main() Dim url As String = "http://example.com/api" Dim client As New WebClient() ' 设置POST请求的参数 Dim postData As String = "param1=value1&param2=value2" Dim postDataBytes As Byte() = Encoding.UTF8.GetBytes(postData) ' 设置请求头 client.Headers(HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded" ' 发送POST请求并获取服务器响应 Dim response As String = Encoding.UTF8.GetString(client.UploadData(url, "POST", postDataBytes)) Console.WriteLine(response) End Sub End Class ``` 异步POST请求是指请求发出后,程序不会阻塞等待服务器响应,而是继续执行后续代码。通常使用`HttpClient`类来执行异步POST请求。可以使用`PostAsync`方法来发送POST请求,并通过`await`关键字来异步等待服务器响应。 以下是一个使用`HttpClient`类发送异步POST请求的示例代码: ```vb Imports System.Net.Http Imports System.Threading.Tasks Public Class Program Public Shared Async Function Main() As Task Dim url As String = "http://example.com/api" Dim client As New HttpClient ' 设置POST请求的参数 Dim postData As String = "param1=value1&param2=value2" Dim content As New StringContent(postData) ' 设置请求头 content.Headers.ContentType = New Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded") ' 发送POST请求并获取服务器响应 Dim response As HttpResponseMessage = Await client.PostAsync(url, content) Dim responseBody As String = Await response.Content.ReadAsStringAsync() Console.WriteLine(responseBody) End Sub End Class ``` 通过使用VB中的同步或异步POST请求,我们可以根据需求选择合适的方式来处理网络请求并获取服务器响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值