SVHTTPRequest 0.5.1

SVHTTPRequest 0.5.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2014年5月

未声明的用户维护。



  • 原作者:
  • Sam Vermette

SVHTTPRequest让您轻松与RESTful(GET、POST、DELETE、PUT)Web API交互。它是基于阻塞的,使用NSURLConnection、ARC以及NSJSONSerialization来自动解析JSON响应。

SVHTTPRequest特色功能:

  • 提供方便的方法快速进行GETPOSTPUTDELETEHEAD和下载请求。
  • 完成块处理程序返回response(JSON则返回NSObject,否则返回NSData)、NSHTTPURLResponseNSError对象。
  • 使用SVHTTPClient时支持持久basePath和基本身份验证签名。
  • 支持POST和PUT请求中的multipart/form-data参数。
  • 与iOS的网络活动指示器通信。

安装

手动安装

如果你的项目不使用ARC:你必须将-fobjc-arc编译器标志添加到Target Settings > Build Phases > Compile Sources中的SVHTTPRequest.mSVHTTPClient.m文件中。

  • SVHTTPRequest/SVHTTPRequest文件夹拖动到你的项目中。
  • #import "SVHTTPRequest.h"(这将同时导入SVHTTPClient

使用方法

(见/Demo中的示例Xcode项目)

执行请求的最简单方法是使用SVHTTPRequest的便利方法

[SVHTTPRequest GET:@"https://api.github.com/repos/samvermette/SVHTTPRequest"
        parameters:nil
        completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) {
            watchersLabel.text = [NSString stringWithFormat:@"SVHTTPRequest has %@ watchers", [response valueForKey:@"watchers"]];
        }];

如果您的请求大多数都是针对同一API端点,则建议使用SVHTTPClient,这样您可以设置将用于每个请求的参数(basePathcachePolicysendParametersAsJSON"userAgent"等)

[[SVHTTPClient sharedClient] setBasePath:@"http://api.twitter.com/1/"];

[[SVHTTPClient sharedClient] GET:@"users/show.json"
                      parameters:[NSDictionary dictionaryWithObject:@"samvermette" forKey:@"screen_name"]
                      completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) {
                          followersLabel.text = [NSString stringWithFormat:@"@samvermette has %@ followers", [response valueForKey:@"followers_count"]];
                      }];

您可以使用sharedClientWithIdentifier:方法创建多个SVHTTPClient实例。

如果您想针对单个请求设置这些属性,您将需要分配并初始化请求,设置属性,然后调用start

SVHTTPRequest *request = [[SVHTTPRequest alloc] initWithAddress:@"http://github.com/api/v2/json/repos/show/samvermette/SVHTTPRequest"
                                                         method:SVHTTPRequestMethodGET 
                                                     parameters:nil 
                                                     completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) {
                                                         watchersLabel.text = [NSString stringWithFormat:@"SVHTTPRequest has %@ watchers", [[response valueForKey:@"repository"] valueForKey:@"watchers"]];
                                                     }];
request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
[request start];

执行下载请求

您可以让SVHTTPRequest将GET响应直接保存到磁盘,并沿途跟踪进度

[SVHTTPRequest GET:@"http://example.com/db.sqlite.zip" 
        parameters:nil 
        saveToPath:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"store.zip"]
          progress:^(float progress) {
              progressLabel.text = [NSString stringWithFormat:@"Downloading (%.0f%%)", progress*100];
          } 
        completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) {
            progressLabel.text = @"Download complete";
            // process file
        }];

取消请求

请确保取消那些用户不再等待的请求

SVHTTPRequest *request = [SVHTTPRequest GET:@"http://api.twitter.com/1/users/show.json"
                                 parameters:[NSDictionary dictionaryWithObject:@"samvermette" forKey:@"screen_name"]
                                 completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) {
                                     NSLog(@"%@", response);
                                 }];

[request cancel];

如果您正在使用SVHTTPClient,您可以通过调用cancelRequestsWithPath:cancelAllRequests来执行此操作。

禁用日志

默认情况下,SVHTTPRequest会在发送每个请求时将消息记录到控制台。您可以通过向目标设置>构建阶段的SVHTTPRequest.m中添加编译器标志-DSVHTTPREQUEST_DISABLE_LOGGING来禁用此功能。

内部工作机制

所有SVHTTPRequest请求都是异步通过NSURLConnection内置的异步方法发出的。但是,完成块是在主线程上执行的。如果它足够耗资源以至于占用主线程,则应将其分派到单独的线程/队列。这可以通过使用Grand Central Dispatch轻松完成。

completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        // cpu-intensive code
    });
}];

致谢

SVHTTPRequest由Sam Vermette参与项目的贡献者提供。如果您有功能建议或错误报告,请通过发送pull请求或通过创建新问题来帮助解决。如果在您的项目中使用SVHTTPRequest,说明出处会很好。