EzHTTP
EzHTTP 是 iOS 应用进行 HTTP 访问的简单易用的库。
- 最简单的 API
- 自动创建请求(查询、表单、JSON)
- 有用的响应(用作字符串、JSON、数据)
- 自动显示/隐藏指示器
- 日志、存根处理器
- 绕过 App-Transport-Security
- 快捷代码
要求
- iOS 8.0+
- Xcode 8+
(对于 Swift 2.x,请使用版本 0.0.x)
安装
CocoaPods
要使用 CocoaPods 安装 EzHTTP,将 EzHTTP 添加到 Podfile 中的依赖项。
pod 'EzHTTP'
然后,在你的项目中运行 pod install
命令。
Swift Package
您也可以稍后使用 Swift Package Xcode11 安装 EzHTTP
https://github.com/asaday/EzHTTP.git
使用方法
首先导入 EzHTTP。
import EzHTTP
请求
简单的 GET 请求
HTTP.get("https://httpbin.org/get") { print($0.string) }
通过表单的 POST
HTTP.request(.POST, "https://httpbin.org/post", params: ["form1": "TEST"]) {}
// auto appended header "Content-Type: application/x-www-form-urlencoded; charset=utf-8"
// or if included HTTP.MultipartFile() , header is "multipart/form-data; boundary=..."
JSON 的 POST
HTTP.request(.POST, "https://httpbin.org/post", json: ["foo": "bar"]) {}
// auto appended header "Content-Type: application/json"
自定义 Headers 的 POST
HTTP.request(.POST, "https://httpbin.org/post",headers: ["Custom-Content":"HAHAHA"])
raw data 的 POST
// data is String or Data
HTTP.request(.POST, "https://httpbin.org/post", body: data, headers:["Content-Type": "application/atom+xml"]) {}
其他方法
HTTP.request(.DELETE, "https://httpbin.org/delete") {}
- OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT
创建请求
let req:NSMutableURLRequest = HTTP.createRequest(.GET, "https://httpbin.org/get", params: [:], headers: [:])
HTTP.request(req!){}
同步
let r = HTTP.getSync("https://httpbin.org/get")
print(r.string)
响应体
- 数据
- 错误
- 响应
作为字符串检索
$0.string
String?$0.stringValue
String
JSON
$0.jsonObject
NSObject? (json解码)$0.jsonObjectValue
NSObject (json解码)
数据
$0.data
数据?$0.dataValue
数据
错误
if let error = $0.error {...}
杂项
status
Int 响应状态代码headers
[String: String] 响应头持续时间
请求
描述
重试次数
请求创建
let req:NSMutableURLRequest = HTTP.create(.GET,"https://httpbin.org/", params: ["foo":"bar"],headers: ["Custom-Content":"HAHAHA"])
参数
正常
方法 | 入参 |
---|---|
GET | 查询 |
POST,PUT | application/x-www-form-urlencoded 或 application/json |
带有文件的POST | multipart/form-data |
将JSON POST改为 HTTP.shard.postASJSON = true
使用文件,在参数中添加HTTP.MultipartFile,自动更改为multipart/form-data
在JSON模式中,数据会自动转换为base64
按需更改请求参数模式
使用 HTTP.makeParams() 或
params = [HTTP.ParamMode.query.rawValue: ["foo":bar"],
HTTP.ParamMode.form.rawValue: ["aaa":"bbb"]]
- ParamMode
键 | 描述 |
---|---|
查询 | 在 URL 的查询 ?aaa=bbb 中 |
表单 | 以 application/x-www-form-urlencoded 格式 |
JSON | 以 application/json 格式 |
multipartForm | 以 multipart/form-data; boundary=... 格式 |
路径 | 在路径 https://example.com/{user} |
头部 | 在头部中 |
-
路径示例
URL 字符串 = "https://example.com/{user}"
参数 = [HTTP.ParamMode.path.rawValue: ["user": "123"]]
构建 URL
"https://example.com/123"
Log,Stub,Retry
var errorHandler: ((result: Response) -> Void)?
var successHandler: ((result: Response) -> Void)?
var logHandler: ((result: Response) -> Void)?
var stubHandler: ((request: NSURLRequest) -> Response?)?
var retryHandler: ((_ result: Response) -> Bool)?
来使用
HTTP.shared.logHandler = { print($0.stringValue) }
或者您可以使用预设的处理程序
HTTP.shared.logHandler = HTTP.defaultLogHandler
HTTP.shared.retryHandler = HTTP.defaultRetryHandler
重试处理程序示例
HTTP.shared.retryHandler = { return $0.retriedCount < 3 }
类型 | 描述 |
---|---|
错误 | 在错误时调用 |
成功 | 在成功时调用 |
日志 | 每次调用都记录 |
存根 | 调用并获取响应。如果响应为 nil,则按正常 HTTP 访问执行 |
重试 | 判断是否重试 |
自签名 SSL
如果您想使用自签名 SSL 认证,请进行以下设置。
设置 Allow Arbitrary Loads = YES
并且
HTTP.shared.allowSelfSignedSSL = true
ATS 转义
ATS(AppTransportSecurity) 启用(默认)并以 http:// 调用,将请求发送到服务器作为套接字连接(不使用 NSURLSession,NSURLConnection :-)
HTTP.shared.escapeATS = true // default is false
HTTP.get("http://httpbin.org/get") {
print($0.string)
}
自动勾选 NSAllowsArbitraryLoads 和 NSExceptionAllowsInsecureHTTPLoads/NSExceptionDomains
- 协议 HTTP/1.1
- cookie 管理 (NSHTTPCookieStorage.sharedHTTPCookieStorage)
- 自动重定向
- 重定向到 HTTPS,自动更改为使用 NSURLSession
- 分块模式(流式传输)