EzHTTP 3.6.1

EzHTTP 3.6.1

测试测试通过
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2020年4月
SPM支持 SPM

asaday 维护。



EzHTTP 3.6.1

  • 作者:
  • asaday

EzHTTP

Build Status Version Status Platform

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/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
  • 分块模式(流式传输)