- 版本:2.2.2
- GitHub: https://github.com/gethuman/nativescript-https
- NPM: https://npmjs.net.cn/package/nativescript-https
- 下载
- 昨天: 18
- 上周: 30
- 上个月: 124
NativeScript-HTTPS
在 Nativescript 中调用基于 HTTP 的 API 的最佳方式。
轻松集成最可靠的本地网络库,并具有最新和最伟大的 HTTPS 安全功能。
插件版本 2.0.0 将 iOS 上的
AFNetworking
提升至 4.0.0,不再依赖于UIWebView
。请确保运行pod repo update
以获取开发机器上最新的AFNetworking
pod。
默认 http 模块的替代品。
功能
- 现代 TLS & SSL 安全功能
- 共享连接池减少请求延迟
- 静默恢复常见的连接问题
- 所有内容都在本地后台线程上运行
- 透明 GZIP
- HTTP/2 支持
- 多部分
- 缓存
- 基本 Cookie 支持
常见问题解答
SSL 锚定是什么,所有这些安全术语是什么意思?
我必须使用 SSL 锚定吗?
不。 此插件无需任何安全配置即可直接使用。无论哪种方式,您都将从上面列出的所有功能中受益。
演示
git clone https://github.com/EddyVerbruggen/nativescript-https
cd nativescript-https/src
npm run demo.ios
npm run demo.android
安装
将 tns-platform-declarations
添加到 Android 和 iOS 的 references.d.ts
!
/// <reference path="./node_modules/tns-platform-declarations/android.d.ts" />
/// <reference path="./node_modules/tns-platform-declarations/ios.d.ts" />
我们还建议将 "skipLibCheck": true,
添加到您的 tsconfig.json
中。有关更多信息,请参阅 此处。
安装插件
tns plugin add nativescript-https
示例
使用 GET
方法调用 API
import * as Https from 'nativescript-https'
Https.request({
url: 'https://httpbin.org/get',
method: 'GET',
timeout: 30 // seconds (default 10)
}).then(function(response) {
console.log('Https.request response', response)
}).catch(function(error) {
console.error('Https.request error', error)
})
配置
安装您的 SSL 证书
在项目的 app
文件夹中创建一个名为 assets
的文件夹,如下所示 <project>/app/assets
。使用 chrome,访问 SSL 证书所在的 URL。查看详细信息,然后将证书图像拖放到 assets
文件夹。
启用 SSL 锚定
import { knownFolders } from 'file-system'
import * as Https from 'nativescript-https'
let dir = knownFolders.currentApp().getFolder('assets')
let certificate = dir.getFile('httpbin.org.cer').path
Https.enableSSLPinning({ host: 'httpbin.org', certificate })
一旦启用了 SSL 锚定,您就不能使用不同的 host
或 证书
文件重新启用。
禁用 SSL 锚定
import * as Https from 'nativescript-https'
Https.disableSSLPinning()
调用此方法之后的所有请求将不再使用 SSL 锚定,直到再次启用。
useLegacy
有一个新选项称为 useLegacy
。您可以为每个请求选项设置。当使用该选项时,请求将更像 {N} http 模块。
- 请求返回的
content
不是一个结果字符串,而是一个对象。它基本上遵循 HTTPContent 格式。您可以通过调用toJSON
或toFile
来操作它。唯一的区别是,toFile
返回一个Promise<File>
,这意味着它是异步的,并在后台线程中运行! - 错误也返回一个
content
,允许您读取其内容。
Cookie
默认情况下,基本 Cookie 支持已启用,类似于 {N} http
模块。将来还会添加更多选项。
启用缓存
import { knownFolders, path } from '@nativescript/core/file-system';
import * as Https from 'nativescript-https'
Https.setCache({
diskLocation: path.join(knownFolders.documents().path, 'httpcache'),
diskSize: 10 * 1024 * 1024 // 10 MiB
});
/// later on when calling your request you can use the cachePolicy option
多部分表单数据
如果将 Content-Type
头部设置为 "multipart/form-data"
,则请求数据体将被评估为多部分表单数据。每个表单参数都期望以以下格式
{
data: any
parameterName: string,
fileName?: string
contentType?: string
}
如果设置了 fileName
和 contentType
,则数据期望为 iOS 上的 NSData
或 Android 上的 native.Array<number>
。
选项
export interface HttpsSSLPinningOptions {
host: string
certificate: string
allowInvalidCertificates?: boolean
validatesDomainName?: boolean
commonName?: string
}
import { HttpRequestOptions } from 'tns-core-modules/http';
export interface HttpsRequestOptions extends HTTPOptions{
useLegacy?: boolean
cachePolicy?: 'noCache' | 'onlyCache' | 'ignoreCache'
onProgress?: (current: number, total: number) => void
}
SSLPinning 选项 | 描述 |
---|---|
host: 字符串 |
这必须是请求域名,例如 sales.company.org 。 |
commonName?: 字符串 |
默认值:options.host,如果证书 CN 与主机不同则设置,例如 *.company.org (仅限 Android) |
certificate: 字符串 |
到您的 .cer 证书文件的 URI 路径。 |
allowInvalidCertificates?: 布尔值 |
默认值:false 。如果使用 SSL pinning,则应始终为 false 。如果使用自签名证书,则将其设置为 true 。 |
validatesDomainName?: 布尔值 |
默认值:true 。确定是否应使用您的已固定证书验证域名。 |
请求选项 | 描述 |
---|---|
useLegacy?: 布尔值 |
默认值:false 。[仅限 IOS] 将其设置为 true 以获取直接在 content 中而不是在 response.body.content 中的响应数据(当状态 >= 300)。 |
`cachePolicy?: 'noCache' | 'onlyCache' |
onProgress?: (current: number, total: number) => void |
[仅限 IOS] 设置进度回调。 |
Webpack / 打包
由于您可能将证书与您的应用程序一起分发(如我们的演示所做的那样),请确保它也由 Webpack 打包。您可以通过添加证书(s)与 CopyWebpackPlugin
来完成此操作。
iOS
故障排除
在开始 beef!之前,请先了解 iOS 的 App Transport Security。
如果您尝试访问未添加到 App Transport Security 白名单的 https
路由,则它将无法工作!您可以通过将以下内容添加到您的项目 Info.plist
来绕过此行为
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
此插件 不会 自动将
NSAllowsArbitraryLoads
添加到您的项目Info.plist
中。
Android
故障排除
如果您的应用程序崩溃,并显示它正在主线程上执行过多的网络操作的消息,那么请将选项 allowLargeResponse
的值传递给 request
函数。
谢谢
谁 | 为什么 |
---|---|
Robert Laverty | 在将其转让给我之前,一直创建和维护此插件很长时间,得到了GetHuman 的 Jeff Whelpley 的帮助。 |
AFNetworking | AFNetworking 一个令人愉悦的 iOS、OS X、watchOS 和 tvOS 的网络框架。 |
Square | okhttp Android 和 Java 应用程序的一个 HTTP+HTTP/2 客户端。 |