tough-cookie 是一个专门用于处理 HTTP cookie 的 npm 包。它支持完整的 cookie 存储、解析和序列化,并且可以很好地与 HTTP 请求库(如 axios,request 等)一起使用。本文将详细介绍如何使用这个包以及常见的使用场景。
安装
你可以通过 npm 直接安装这个包:
npm install tough-cookie
创建一个 CookieJar
tough-cookie 的核心是 CookieJar,它是一个完整的 cookie 存储和管理的容器,支持存储和读取多个 cookie。我们可以使用以下方式创建一个新的 CookieJar 实例:
const { CookieJar } = require('tough-cookie') const jar = new CookieJar()
添加 Cookie
接下来,我们可以使用 CookieJar
实例的 setCookie
方法添加新的 cookie:
-- -------------------- ---- ------- ----- - ------ - - ----------------------- ----- ------ - --- -------- ---- ------------ ------ ------------- ------- ------------- -- --------------------- ----------------------
其中,Cookie
构造函数接收一个对象作为参数,包括 cookie 的 key、value、domain 等属性。setCookie
方法可以将新的 cookie 添加到 jar 中,在第二个参数中指定该 cookie 所属的 URL。
获取 Cookie
可以使用 CookieJar
实例的 getCookies
方法获得 cookie:
const cookies = jar.getCookiesSync('https://example.com') console.log(cookies)
其中,getCookies
方法会返回一个 promise,我们也可以使用 getCookiesSync
方法同步获取结果。返回的结果是一个数组,每个元素表示一个 cookie 对象。
序列化和反序列化
tough-cookie 还支持将 cookie 序列化为字符串格式,以及将字符串格式的 cookie 反序列化为 Cookie 对象。例如,我们可以使用以下方式将 CookieJar 对象序列化为字符串:
const serialized = jar.serializeSync('https://example.com') console.log(serialized)
我们也可以使用 CookieJar.deserializeSync
将字符串反序列化为 CookieJar 对象:
const { CookieJar } = require('tough-cookie') const serialized = '...[cookie string]...' const jar = CookieJar.deserializeSync(serialized, 'https://example.com') const cookies = jar.getCookiesSync('https://example.com') console.log(cookies)
示例:使用 axios 发送带 cookie 的请求
最常见的使用场景之一就是在发送 HTTP 请求时添加 cookie。我们可以使用 axios 作为 HTTP 请求库,并利用 tough-cookie 来处理 cookie。以下是一个示例代码:
-- -------------------- ---- ------- ----- ----- - ---------------- ----- - --------- - - ----------------------- ----- --- - --- ----------- ----- ------------- - -------------- -------- ---------------------- ---------------- ----- -- -------- ------ -------- - ------- ------------------- --------------- ------------------ - -- -------------------------------------------- -------- -- - ----- ------- - ----- -------------------------- ----- ------------ - ----------------- --------------------- - ------------ ------ ------ -- --------------------------------------------- ---------- -- - -- ----------------- -- ------------------------------- - ----- --------- - ------------------------------ ----- ------------ ------------------- -------------- -- - ----- ------ - -------------------------- ----- --------------------- -------------------- -- - - ------ -------- --
其中,我们首先创建了一个 CookieJar 实例,然后通过 axios 创建了一个 HTTP 请求的实例。在请求时,我们通过 CookieJar
实例的 getCookies
方法获取当前 URL 下的 cookie,并将其格式化为 Cookie
格式的字符串,添加到请求的 headers 中。在响应时,我们从响应的 headers 中读取 cookie,将 cookie 添加到 CookieJar
实例中。这样,我们就可以在多次 HTTP 请求之间共享 cookie。
总结
tough-cookie 是一个专门用于处理 HTTP cookie 的 npm 包,它支持完整的 cookie 存储、解析和序列化,并且可以很好地与 HTTP 请求库一起使用。通过学习本文,你应该已经掌握了使用 CookieJar、Cookie 等核心概念,以及如何在实际项目中使用该包来处理 cookie。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/40558