使用asihttprequest基于http状态代码获取数据

时间:2011-12-07 21:24:58

标签: ios web-services asihttprequest polling

每次更改内容时,我都会尝试将我的iOS应用程序连接到来自我的Web服务的GET数据。我目前的实现是使用NSTimer并执行ASIHttpRequest,但我不喜欢该轮询实现。有没有更好的方法呢?

我正在考虑启动请求并让它继续尝试,直到Web服务状态代码变为OK(状态200)或状态代码为“modified”。我如何在视图控制器中执行此操作?

这是我到目前为止所做的:

self.asiRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:self.barcodeUrl]];
[self.asiRequest setDelegate:self];
[self.asiRequest startAsynchronous];
[self.asiRequest addRequestHeader:@"Accept" value:@"application/json"];
[self.asiRequest addRequestHeader:@"Content-Type" value:@"application/json"];
int statusCode = [self.asiRequest responseStatusCode];

我知道如果请求成功,则委托方法- (void)requestFinished:(ASIHTTPRequest *)request

我想我的问题是,如何保持开放的ASIHttpRequest,以便当Web服务返回“已修改”时,它会调用GET请求然后再次保持打开连接?这必须是异步的,不能在UI线程上运行,因为我不想让我的应用程序挂起。

非常感谢!

1 个答案:

答案 0 :(得分:0)

最简单的方法是在客户端不做太多工作,让您的Web服务在返回“已修改”时发送Location:标头,指向您想要的网址{ {1}}新内容。如果要监控的URL不同,具体取决于例如:用户ID或您所在应用程序的区域,制作一个监视器脚本,您可以在其中传递GET参数,以配置在返回“已修改”时应返回给您的确切URL。

GET然后会自动ASIHTTPRequestGET的内容,您可以再次将Location:重新安排到监控网址,知道回复(如果非空/“未修改”)将始终是新数据,因为重定向到新数据发生在幕后。