Unirest 1.1.4

Unirest 1.1.4

测试测试过
Lang语言 MUMPSMUMPS
许可证 MIT
发布最新发布2015年2月

Marco PalladinoThibault Charbonnier维护。



Unirest 1.1.4

  • Mashape

针对Objective-C的Unirest

Unirest是一组轻量级的HTTP库,支持多种语言。

特性

  • 支持发送GETPOSTPUTPATCHDELETE请求
  • 同步和异步(非阻塞)请求
  • 支持表单参数、文件上传和自定义请求体
  • 支持gzip
  • 原生支持基本身份验证
  • 可自定义超时时间
  • 每项请求可自定义默认头部信息(DRY原则)
  • 自动将JSON响应解析为原生对象(`NSDictionary`或`NSArray`)

安装

GitHub(或克隆仓库)下载Objective-C Unirest库,并将其文件夹导入到项目中。您还可以使用CocoaPods安装Unirest-obj-c。

要求

Unirest-Obj-C客户端库需要在您的Xcode项目中启用ARC(自动引用计数)。要启用ARC,请选择您的项目或目标,然后转到构建设置,在“Apple LLVM编译器3.0-语言”部分下,您将看到“Objective-C自动引用计数”选项。

Enable ARC in Xcode

对于现有项目,幸运的是,Xcode提供了一个工具将现有代码转换为ARC,这在“编辑”->“重构”->“转换为Objective-C ARC”中可用。

创建请求

因此,你可能想知道如何使用Unirest使在Objective-C中创建请求变得更容易,让我们看一个工作的例子

NSDictionary* headers = @{@"accept": @"application/json"};
NSDictionary* parameters = @{@"parameter": @"value", @"foo": @"bar"};

UNIHTTPJsonResponse *response = [[UNIRest post:^(UNISimpleRequest *request) {
  [request setUrl:@"http://httpbin.org/post"];
  [request setHeaders:headers];
  [request setParameters:parameters];
}] asJson];

与Unirest Java库类似,Objective-C库支持多种响应类型,这些类型作为最后一个参数给出。在上面的例子中,我们使用`asJson`获取JSON响应,类似地还有`asBinary`和`asString`用于其他类型的响应,例如文件数据和超媒体响应。

异步请求

对于非阻塞请求,您将想要发送异步请求,以便在后台获取或更新数据时保持应用程序运行,使用unirest执行这一点非常简便,几乎不需要修改之前示例中的代码。

NSDictionary *headers = @{@"accept": @"application/json"};
NSDictionary *parameters = @{@"parameter": @"value", @"foo": @"bar"};

[[UNIRest post:^(UNISimpleRequest *request) {
  [request setUrl:@"http://httpbin.org/post"];
  [request setHeaders:headers];
  [request setParameters:parameters];
}] asJsonAsync:^(UNIHTTPJsonResponse* response, NSError *error) {
  // This is the asyncronous callback block
  NSInteger code = response.code;
  NSDictionary *responseHeaders = response.headers;
  UNIJsonNode *body = response.body;
  NSData *rawBody = response.rawBody;
}];

取消异步请求

您可以通过在UNIUrlConnection对象上调用cancel方法来取消异步请求。

UNIUrlConnection *asyncConnection = [[UNIRest get:^(UNISimpleRequest *simpleRequest) {
    [request setUrl:@"http://httpbin.org/get"];
}] asJsonAsync:^(UNIHTTPJsonResponse *response, NSError *error) {
    // Do something
}];

[asyncConnection cancel]; // Cancel request

文件上传

使用Objective-C中的unirest通过请求传输文件可以通过创建一个NSURL对象,并以参数值的形式传递给UNISimpleRequest来实现,具体如下

NSDictionary* headers = @{@"accept": @"application/json"};
NSURL* file = nil;
NSDictionary* parameters = @{@"parameter": @"value", @"file": file};

UNIHTTPJsonResponse *response = [[UNIRest post:^(UNISimpleRequest *request) {
  [request setUrl:@"http://httpbin.org/post"];
  [request setHeaders:headers];
  [request setParameters:parameters];
}] asJson];

自定义实体体

要发送自定义体(如JSON),只需使用NSJSONSerialization进行数据序列化,并用BodyRequest[method]Entity代替[method]代码块

NSDictionary *headers = @{@"accept": @"application/json"};
NSDictionary *parameters = @{@"parameter": @"value", @"foo": @"bar"};

UNIHTTPJsonResponse *response = [[UNIRest postEntity:^(UNIBodyRequest *request) {
  [request setUrl:@"http://httpbin.org/post"];
  [request setHeaders:headers];
  // Converting NSDictionary to JSON:
  [request setBody:[NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil]];
}] asJson];

基本认证

可以通过在构建器中设置usernamepassword属性,使用基本认证来认证请求

UNIHTTPJsonResponse *response = [[UNIRest get:^(UNISimpleRequest *request) {
    [request setUrl:@"http://httpbin.org/get"];
    [request setUsername:@"user"];
    [request setPassword:@"password"];
}] asJson];

请求

Objective-C unirest库使用类型为UNISimpleRequest和UNIBodyRequest的配置块来配置URL、头部以及请求的参数/体。

+(UNIHTTPRequest*) get:(void (^)(UNISimpleRequestBlock*)) config;

+(UNIHTTPRequestWithBody*) post:(void (^)(UNISimpleRequestBlock*)) config;
+(UNIHTTPRequestWithBody*) postEntity:(void (^)(UNIBodyRequestBlock*)) config;

+(UNIHTTPRequestWithBody*) put:(void (^)(UNISimpleRequestBlock*)) config;
+(UNIHTTPRequestWithBody*) putEntity:(void (^)(UNIBodyRequestBlock*)) config;

+(UNIHTTPRequestWithBody*) patch:(void (^)(UNISimpleRequestBlock*)) config;
+(UNIHTTPRequestWithBody*) patchEntity:(void (^)(UNIBodyRequestBlock*)) config;

+(UNIHTTPRequestWithBody*) delete:(void (^)(UNISimpleRequestBlock*)) config;
+(UNIHTTPRequestWithBody*) deleteEntity:(void (^)(UNIBodyRequestBlock*)) config;
  • UNIHTTPRequest [UNIRest get: (void (^)(UNISimpleRequestBlock*))] config;

    发送与给定URL的请求类型等效的请求

  • UNIHTTPRequestWithBody [UNIRest (post|postEntity): (void (^)(UNISimpleRequestBlock|UNIBodyRequestBlock)(*))] config;

    发送与给定URL的请求类型等效的请求

  • UNIHTTPRequestWithBody [UNIRest (put|putEntity): (void (^)(UNISimpleRequestBlock|UNIBodyRequestBlock)(*))] config;

    发送与给定URL的请求类型等效的请求

  • UNIHTTPRequestWithBody [UNIRest (patch|patchEntity): (void (^)(UNISimpleRequestBlock|UNIBodyRequestBlock)(*))] config;

    发送与给定URL的请求类型等效的请求

  • UNIHTTPRequestWithBody [UNIRest (delete|deleteEntity): (void (^)(UNISimpleRequestBlock|UNIBodyRequestBlock)(*))] config;

    发送与给定URL的请求类型等效的请求

响应

然后可以通过调用以下之一的来执行UNIHTTPRequestUNIHTTPRequestWithBody

-(UNIHTTPStringResponse*) asString;
-(UNIHTTPStringResponse*) asString:(NSError**) error;
-(UNIUrlConnection*) asStringAsync:(UNIHTTPStringResponseBlock) response;

-(UNIHTTPBinaryResponse*) asBinary;
-(UNIHTTPBinaryResponse*) asBinary:(NSError**) error;
-(UNIUrlConnection*) asBinaryAsync:(UNIHTTPBinaryResponseBlock) response;

-(UNIHTTPJsonResponse*) asJson;
-(UNIHTTPJsonResponse*) asJson:(NSError**) error;
-(UNIUrlConnection*) asJsonAsync:(UNIHTTPJsonResponseBlock) response;
  • -(UNIHTTPStringResponse*) asString;

    以字符串的形式返回响应的阻塞请求调用,适用于超媒体API或其他。

  • -(UNIHTTPStringResponse*) asString:(NSError**) error;

    以字符串形式返回响应并处理错误的阻塞请求调用。

  • -(UNIUrlConnection*) asStringAsync:(UNIHTTPStringResponseBlock) response;

    以字符串形式异步返回响应,适用于超媒体API或其他。

  • -(UNIHTTPBinaryResponse*) asBinary;

    以二进制输出的形式返回响应的阻塞请求调用,适用于文件和其他媒体。

  • -(UNIHTTPBinaryResponse*) asBinary:(NSError**) error;

    以二进制输出形式返回响应并处理错误的阻塞请求调用。

  • -(UNIUrlConnection*) asBinaryAsync:(UNIHTTPBinaryResponseBlock) response;

    以二进制输出形式异步返回响应,适用于文件和其他媒体。

  • -(UNIHTTPJsonResponse*) asJson;

    以JSON形式返回响应的阻塞请求调用。

  • -(UNIHTTPJsonResponse*) asString:(NSError**) error;

    以JSON形式返回响应并处理错误的阻塞请求调用。

  • -(UNIUrlConnection*) asJsonAsync:(UNIHTTPJsonResponseBlock) response;

    以JSON形式异步返回响应。

高级配置

您可以为Unirest-Obj-C配置一些高级设置

超时

您可以为自定义超时值(以为单位)

[UNIRest timeout:2];

默认超时是60

默认请求头

您可以为每个请求设置默认的头部

[UNIRest defaultHeader:@"Header1" value:@"Value1"];
[UNIRest defaultHeader:@"Header2" value:@"Value2"];

您可以通过以下操作随时清除默认头部

[UNIRest clearDefaultHeaders];

由Mashape团队用❤️制作