返回博客

curl Cookies:如何安全地发送、存储和重用会话

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

21-Aug-2026

TL;DR:

  • curl cookie 可以直接使用 -b 发送,但对于多请求会话,cookie jar 更安全。 jar 允许 curl 应用过期、域、路径和传输规则,而不是手动重建 Cookie 头。
  • -c 写入从 Set-Cookie 接收到的 cookies;-b 读取下一个请求的 cookies。 当脚本必须更新并重用相同的 jar 时,使用这两个选项。
  • Cookie 文件是凭证。 将它们存储在源控制之外,限制文件权限,从日志中编辑值,在授权工作流结束时移除它们。
  • curl 不执行客户端 JavaScript,也不完成交互式 MFA 和密钥证明程序。 这些流程需要经批准的浏览器会话和人为控制的身份验证边界。
  • 无阻式浏览器可以在 curl 达到其限制后继续浏览器仅的工作流。 它提供一个新的云浏览器会话;您的应用程序仍然拥有授权和凭证处理。
  • 免费开始。 新的无阻式帐户包括免费的无阻式浏览器运行时——在 app.scrapeless.com 注册。

介绍:Cookies 将单独的 HTTP 请求转变为会话

HTTP 请求是独立的,直到服务器和客户端达成状态一致。响应可以设置一个 cookie,之后的请求可以将该 cookie 返回给匹配的主机和路径。这种小交换是许多应用程序保留偏好、匿名购物车、同意状态和授权会话的方式。

curl 包含一个 cookie 引擎来完成这个任务。官方 curl HTTP 脚本指南 记录了字面 cookie 字符串和持久 jars,而 HTTP 状态管理规范 定义了它们背后的服务器和用户代理行为。

本指南使用公共测试端点和 curl 8.7.1 来发送、捕获、存储、检查和重用非敏感演示 cookies。然后,它在 HTTP 会话和仅浏览器身份验证之间划清界限。


什么是 curl Cookie?

curl cookie 是 curl 在应用其 cookie 引擎规则后放置在 HTTP Cookie 请求头中的名称值对。

有两种方法可以提供一个:

方法 最佳适用 主要权衡
使用 --cookie / -b 的字面字符串 一个控制的请求,具有已知的非敏感值 您拥有每个值和匹配决策
使用 --cookie / -b 的 cookie 文件 在命令之间携带的会话 文件成为凭证材料
使用 --cookie-jar / -c 写入的 cookie jar 服务器驱动的多步骤流程 jar 必须受到保护并清理

响应方向不同。服务器发送 Set-Cookie;curl 评估属性并将符合条件的 cookies 记录在内存或 jar 中。Set-Cookie 头引用 描述了诸如 DomainPathExpiresMax-AgeSecureHttpOnlySameSite 等属性。


使用 -b 发送 Cookies

-b--cookie 的简写形式。当其参数包含等号时,curl 将值视为 cookie 数据而不是文件名。

bash Copy
curl --silent \
  --cookie "theme=dark; view=compact" \
  https://httpbingo.org/cookies

公共端点回显它接收到的 cookies:

json Copy
{
  "cookies": {
    "theme": "dark",
    "view": "compact"
  }
}

字面值适用于无害的偏好。不要在共享命令行上放置真实的会话标识符:shell 历史、进程检查、终端录音和 CI 日志都可能暴露它。


Set-Cookie 是一个响应头,因此应与响应主体分开检查。--dump-header - 将头写入标准输出,而 --output /dev/null 删去主体。

bash Copy
curl --silent \
  --dump-header - \
  --output /dev/null \
  "https://httpbingo.org/cookies/set?theme=dark"

实时响应返回了一个 HTTP 重定向和这个头:

text Copy
set-cookie: theme=dark; Path=/; HttpOnly; Secure

HttpOnly 阻止浏览器 JavaScript 读取该值;但并不阻止 HTTP 客户端存储和发送 cookie。Secure 将传输限制为安全传输。没有一个属性会将 cookie 转变为权限授予——服务器仍然决定会话可以访问什么。


cookie jar 以 Netscape cookie 文件格式保留服务器的属性。使用 -c 在设置状态的响应上,然后在需要它的请求上使用 -b

bash Copy
COOKIE_JAR="$(mktemp)"
chmod 600 "$COOKIE_JAR"

curl --silent --location \
  --cookie-jar "$COOKIE_JAR" \
  "https://httpbingo.org/cookies/set?demo_session=authorized" \
  --output /dev/null

curl --silent \
  --cookie "$COOKIE_JAR" \
  https://httpbingo.org/cookies

第二个命令返回:

json Copy
{
  "cookies": {
    "demo_session": "authorized"
  }
}

当服务器可能更新会话时,读取和写入同一个文件:

bash Copy
curl --silent --location \
  --cookie "$COOKIE_JAR" \
  --cookie-jar "$COOKIE_JAR" \
  https://httpbingo.org/cookies

在传输完成后写入 jar。将其放在私有文件系统上,并在授权工作完成后将其移除。

开始使用 Scrapeless 进行抓取

利用 Scrapeless 强化您的网页抓取和自动化工作流程!
今天注册并获取 $5 免费积分无需信用卡

立即在 Scrapeless Dashboard 领取您的免费积分!
Scrapeless Dashboard 显示 $5.00 团队积分


Cookie 引擎仅发送作用域匹配请求的 Cookie。一个 jar 行记录域名、是否包含子域、路径、安全标志、过期时间、名称和值。

捕获的公共测试 Cookie 如下所示:

text Copy
#HttpOnly_httpbingo.org FALSE / TRUE 0 demo_session authorized

#HttpOnly_ 前缀是 curl 的文件格式标记,用于 HttpOnly Cookie。FALSE 表示该域不包括子域,/ 是匹配路径,TRUE 标记安全传输,0 表示没有持久过期时间戳的会话 Cookie。

不要扩大域名或路径以使请求可用。作用域是安全边界。一个应用程序主机的 Cookie 不应复制到不相关的主机,并且路径限制的 Cookie 应保持路径限制。


安全、HttpOnly 和 SameSite

Cookie 属性回答不同的问题,因此请独立对待它们。

属性 控制内容 curl 影响
Secure Cookie 是否通过安全传输传输 curl 不会通过普通 HTTP 发送它
HttpOnly 浏览器 JavaScript 是否可以读取它 curl 在其 jar 中保留标记
SameSite 浏览器在跨站点上下文中是否发送它 命令行 HTTP 客户端不会复制浏览器的完整站点上下文模型
Domain 哪个主机作用域可以接收它 curl 匹配请求主机
Path 哪些 URL 路径可以接收它 curl 匹配请求路径

对于授权会话,请遵循 OWASP 会话管理控制:保护静态和动态中的标识符,通过应用程序进行轮换,并使终止在服务器端有效。


--verbose 显示传出的请求头,包括 Cookie。这使得它既有用又危险。

仅在私人本地终端和演示值中使用详细输出。在共享日志中,确认名称和来自 jar 的作用域,同时编辑值:

bash Copy
awk 'BEGIN { FS="\t" } !/^#/ && NF >= 7 { print $1, $3, $6, "[REDACTED]" }' "$COOKIE_JAR"

如果服务器返回 401,首先确认 curl 是否选择了预期的 Cookie 用于主机和路径。如果服务器返回 403,则会话可能已通过身份验证,但未获授权访问该资源。任一状态都不应更改账户作用域或复制其他用户的会话。


当 curl 不够用时

curl 是一个 HTTP 客户端,而不是浏览器运行时。它不会执行客户端 JavaScript,不会渲染登录小部件,不会满足密码仪式,也不会让个人批准 MFA 提示。

仅基于浏览器的流程还依赖于超出 Cookie 的状态:来源存储、服务工作者、JavaScript 生成的请求、设备绑定凭证和互动重定向。因此,仅重构 Cookie 头可能会导致不完整或无效的会话。

在文档化的 HTTP 流程和受控 API 中使用 curl。当应用程序需要浏览器行为时,请使用经批准的浏览器会话。


使用 Scrapeless 继续工作流程

Scrapeless Scraping Browser 提供一个云浏览器,支持 JavaScript 渲染和互动工作流程。它不会将未经授权的 curl Cookie 转换为访问权限。

安全的交接是一个新会话:创建云浏览器,让授权操作员完成任何必要的登录或 MFA 边界,然后将批准的工作保持在该会话内。精确的 SDK 连接需要您的 Scrapeless API 密钥。

注意:以下块需要 SCRAPELESS_API_KEY 和授权目标。本地验证环境确认已安装 SDK 接口,但没有运行经过身份验证的云会话。

javascript Copy
import { Playwright } from "@scrapeless-ai/sdk";

const browser = await Playwright.connect({
  apiKey: process.env.SCRAPELESS_API_KEY,
  sessionTTL: 300,
  proxyCountry: "US",
});

const context = await browser.newContext();
const page = await context.newPage();
await page.goto("https://app.example.com/login", {
  waitUntil: "domcontentloaded",
});

// An authorized operator completes any login, MFA, or passkey step here.
// Continue only within the account and scope approved for the workflow.

await browser.close();

Scrapeless Scraping Browser 页面解释了管理浏览器的边界。查看 Scrapeless 价格,保持 SDK 与 Scrapeless 文档 对齐,并在浏览器必须生成文件而不是 HTTP 响应正文时使用 Puppeteer 下载工作流


结论:保持会话状态的故意性

curl cookies 是可预测的,当你将流程分为接收、存储、匹配、发送和销毁时。使用 -c 来捕获服务器状态,-b 来重用它,并在多个命令参与时使用私有 cookie jar。

当工作流进入 JavaScript、交互式身份验证或浏览器绑定的凭证时,停止将会话视为一个头部练习。创建一个经过批准的浏览器会话,并保持其范围明确。


准备构建一个更安全的浏览器工作流?

加入我们的社区,与构建授权自动化的开发者比较会话处理模式:Discord · Telegram

app.scrapeless.com 上注册以获得免费的 Scraping Browser 运行时,并将仅限浏览器的步骤转移到管理会话中。


常见问题

问:curl -b 作用是什么?

curl -b 启用 cookie 引擎,并为请求提供字面 cookie 字符串或 cookie 文件。

问:curl -c 作用是什么?

curl -c 在传输完成时将合格的 cookie 写入 cookie jar。当同一文件必须被读取和更新时,与 -b 配对使用。

问:curl cookie jar 安全提交吗?

不安全。cookie jar 可能包含活跃会话凭证,应保持在源控制之外,并具有限制性的文件系统权限。

问:为何 curl 不发送 jar 中的 cookie?

cookie 可能已过期,或可能不匹配请求的域、路径或安全传输要求。在不打印值的情况下检查这些属性。

问:curl 可以完成 MFA 或密钥登录吗?

不可以。交互式 MFA 和密钥程序需要浏览器,并且通常需要授权人员来批准步骤。

问:Scrapeless 可以导入每个 curl cookie jar 吗?

不可以。浏览器会话可能依赖于除了 cookie 之外的更多内容,因此安全的一般模式是启动一个新的授权浏览器会话,并在其中完成所需的身份验证。

问:会话工作流应该使用多少并发?

每个主机保持不超过三个工作程序,直到应用程序的所有者批准不同的限制,并隔离每个工作程序的会话状态。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录