使用asihttprequest根据http状态码获取数据
我试图每次更改某些内容时将我的iOS应用程序连接到来自Web服务的GET数据。 我目前的实现是使用NSTimer并执行ASIHttpRequest,但我不喜欢该轮询实现。 有没有更好的方法来做到这一点?
我正在考虑启动请求,并让它继续尝试,直到Web服务状态代码变为OK(状态200)或可能是“已修改”的状态代码。 我如何在视图控制器中执行此操作?
这是我到目前为止:
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线程上运行,因为我不想让应用程序挂起。
非常感谢!
无需在客户端做太多工作,最简单的方法就是让Web服务在返回“修改”时发送一个Location:
标头,指向要用新内容GET
的URL。 如果要监视的URL取决于例如用户ID或应用程序所在的区域而不同,请创建一个监视器脚本,您可以在其中传递GET
参数以配置返回“修改”时应返回给您的确切URL。
然后, ASIHTTPRequest
将自动GET
新Location:
的内容Location:
并且您可以重新安排它在requestFinished:
到监视器URL中,知道响应(如果不为空/“未修改”)将始终是新数据,因为重定向到新数据发生在幕后。
上一篇: Using asihttprequest to fetch data based on http status code
下一篇: Will this work?