一个易于使用的异步 HTTP 网络库,适用于 iOS 和 OS X。
GCNetworkRequest 需要 iOS 5.0 及以上或 OS X 10.7 及以上。它还要求 Xcode 4.5 及以上和 LLVM 编译器 4.1。
克隆仓库并将所需文件添加到您的 Xcode 项目中。检查这些文件是否出现在您的目标(target)的“编译源”部分。如果不是,请手动将目标分配给这些文件。
如果在非 ARC 项目中使用此库,请确保为所有实现文件添加 -fobjc-arc
编译器标志。
此库被设计为模块化。为了正确使用此库,所需的最小类包括 GCHTTPRequestOperation
和 GCNetworkRequest
。
当您添加了 GCNetworkReachability
类时,需要将您的目标链接到 SystemConfiguration.framework
。
网络操作 | |
---|---|
GCHTTPRequestOperation | 带有完成和错误处理块的网络操作的基础类。 |
GCJSONRequestOperaton | 是 GCHTTPRequestOperation 的子类,用于下载和解析 JSON 响应数据。 |
GCXMLRequestOperation | 是 GCHTTPRequestOperation 的子类,用于下载 XML 响应数据。它使用 NSXMLParser 输出进行 iOS,或通过单独的方法使用 NSXMLDocument 输出进行 OS X。 |
GCImageRequestOperation | 是 GCHTTPRequestOperation 的子类,用于下载图像。 |
网络请求 | |
GCNetworkRequest | 封装一个 NSMutableURLRequest 并添加用于上传数据和用户身份验证的简单方法。这个类是 GCHTTPRequestOperation 及其子类的参数所需。 |
网络队列 | |
GCNetworkQueue | 是 NSOperationQueue 的一个子类。该类使得使用并发变得简单。它还激活了状态栏中的网络指示器。 |
网络可达性 | |
GCNetworkReachability | 此类允许应用程序监控网络状态。它可以检查是否有互联网连接,如果是,则报告设备是否通过 WiFi 或 WWAN 连接(3G、Edge)。 |
callbackQueue 参数决定了完成和错误处理函数在哪个 GCD 队列中被调用。当你传入 nil
或 NULL
时,块将在主线程上被调用。如果你想在实际处理函数中执行长时间任务,最好插入一个并发分发队列。这样就不会阻塞主线程,并且保持应用程序响应。
如果你的应用程序与Web服务同步数据,那么很可能是涉及到几个串联的HTTP请求。该API被设计为可以内联插入到一个私有GCD队列中或者在 NSOperationQueue
中添加。
GCNetworkRequest *request = [GCNetworkRequest requestWithURLString:@"http://maps.googleapis.com/maps/api/geocode/json?address=Amsterdam,+Nederland&sensor=true"];
GCJSONRequestOperation *operation = [GCJSONRequestOperation JSONRequest:request
callBackQueue:nil
completionHandler:^(id JSON, NSHTTPURLResponse *response) {
/* Do something with 'JSON'..
Response status code: response.statusCode */
} errorHandler:^(id JSON, NSHTTPURLResponse *response, NSError *error) {
/* Do something with 'error'..
If you get a JSON response as error, log the output of 'JSON' */
}];
[operation startRequest];
文件上传使用多部分表单数据的POST请求完成。数据可以通过使用 multiPartFormDataHandler
块添加到主体,它包含一个 formData
对象,该对象允许你添加和指定上传所需的数据。
NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"thumbnail.png"]);
GCNetworkRequest *request = [GCNetworkRequest requestWithURLString:@"http://www.someurl.com/upload"
parameters:nil
multiPartFormDataHandler:^(id <GCMultiPartFormData> formData) {
[formData addData:imageData name:@"thumbnail" filename:@"thumbnail.png" mimeType:@"image/png"];
}];
GCHTTPRequestOperation *operation = [GCHTTPRequestOperation HTTPRequest:request callBackQueue:nil completionHandler:nil errorHandler:nil];
[operation startRequest];
网络请求可以在任何时候取消。
[operation cancelRequest];
[operation downloadProgressHandler:^(NSUInteger bytesRead, NSUInteger totalBytesRead, NSUInteger totalBytesExpectedToRead) {
// This handler gets a continuous callback and the parameters can be used to track the progress
}];
HTTP 管道是一种技术,其中多个 HTTP 请求在单个 TCP 连接上发送,无需等待相应的响应。如果你的Web服务器支持该功能,你可以通过此方法启用它。GET 和 HEAD 请求始终被管道化。请注意,POST 请求不应该被管道化。
[request requestShouldUseHTTPPipelining:YES];
你可以通过两种方式开始网络操作。对于单个操作,你可以调用 -startRequest:
方法。如果你有多个操作已调度,则可以使用 GCNetworkQueue
类向单个队列中添加操作。网络队列允许你控制并发连接的最大数量。
GCNetworkReachability
类允许你监视设备的网络状态。更多信息请参阅 这里。
此代码在 MIT 许可证的条款和条件下分发。
版权(c)2013 Glenn Chiu
特此授予任何人免费获取本软件及其相关文档副本(统称为“软件”)的权利,在不作限制的情况下(包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利),并允许本软件提供对象的人按照以下条件做此类事情:
上述版权声明和本许可声明应包含在本软件的副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,不论源于合同、侵权或其他方式,均与软件有关、使用软件或其他方式。