curl Cookies: Cách Gửi, Lưu Trữ và Tái Sử Dụng Phiên An Toàn
Web Data Collection Specialist
TL;DR:
- Một cookie curl có thể được gửi trực tiếp với
-b, nhưng một cookie jar an toàn hơn cho một phiên đa yêu cầu. Jar cho phép curl áp dụng các quy tắc hết hạn, miền, đường dẫn và vận chuyển thay vì phải xây dựng lại một tiêu đềCookiebằng tay. -cghi lại các cookie nhận được từSet-Cookie;-bđọc các cookie cho yêu cầu tiếp theo. Sử dụng cả hai tùy chọn khi một script cần cập nhật và sử dụng lại cùng một jar.- Tệp cookie là thông tin xác thực. Lưu trữ chúng bên ngoài kiểm soát nguồn, hạn chế quyền truy cập tệp, xóa các giá trị khỏi logs, và xóa chúng khi quy trình làm việc được ủy quyền kết thúc.
- curl không thực thi JavaScript phía khách hoặc hoàn thành các nghi thức MFA và khóa bảo mật tương tác. Những quy trình đó cần một phiên trình duyệt được chấp thuận và một ranh giới xác thực do con người kiểm soát.
- Scrapeless Scraping Browser có thể tiếp tục một quy trình chỉ có trình duyệt sau khi curl đạt giới hạn của nó. Nó cung cấp một phiên trình duyệt đám mây mới; ứng dụng của bạn vẫn sở hữu quyền ủy quyền và xử lý thông tin xác thực.
- Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm thời gian chạy Scraping Browser miễn phí — đăng ký tại app.scrapeless.com.
Giới thiệu: Cookies Biến Các Yêu Cầu HTTP Tách Biệt Thành Một Phiên
Các yêu cầu HTTP là độc lập cho đến khi máy chủ và khách hàng đồng ý về trạng thái. Một phản hồi có thể thiết lập một cookie, và một yêu cầu sau đó có thể trả lại cookie đó cho máy chủ và đường dẫn phù hợp. Sự trao đổi nhỏ đó là cách nhiều ứng dụng bảo tồn sở thích, giỏ hàng ẩn danh, trạng thái đồng ý, và các phiên được ủy quyền.
curl bao gồm một động cơ cookie cho công việc này. Tài liệu hướng dẫn lập trình HTTP curl chính thức mô tả cả chuỗi cookie tĩnh và các jar vĩnh viễn, trong khi cụ thể hóa quản lý trạng thái HTTP định nghĩa hành vi của máy chủ và tác nhân người dùng đứng sau chúng.
Hướng dẫn này sử dụng một điểm kiểm tra công khai và curl 8.7.1 để gửi, nắm bắt, lưu trữ, kiểm tra, và tái sử dụng các cookie minh họa không nhạy cảm. Nó sau đó vạch ra một ranh giới rõ ràng giữa một phiên HTTP và xác thực chỉ trình duyệt.
Cookie curl là gì?
Cookie curl là một cặp tên-giá trị mà curl đặt vào tiêu đề yêu cầu HTTP Cookie sau khi áp dụng các quy tắc của động cơ cookie.
Có hai cách để cung cấp một cái:
| Phương pháp | Phù hợp nhất | Lợi ích chính |
|---|---|---|
Chuỗi tĩnh với --cookie / -b |
Một yêu cầu được kiểm soát với các giá trị không nhạy cảm đã biết | Bạn sở hữu mọi giá trị và quyết định tương ứng |
Tệp cookie với --cookie / -b |
Một phiên được vận chuyển giữa các lệnh | Tệp trở thành tài liệu thông tin xác thực |
Cookie jar được ghi với --cookie-jar / -c |
Một quy trình đa bước do máy chủ điều khiển | Jar phải được bảo vệ và làm sạch |
Hướng phản hồi thì khác nhau. Một máy chủ gửi Set-Cookie; curl đánh giá các thuộc tính và ghi lại các cookie đủ điều kiện vào bộ nhớ hoặc vào một jar. Tài liệu tài liệu tham khảo tiêu đề Set-Cookie mô tả các thuộc tính như Domain, Path, Expires, Max-Age, Secure, HttpOnly, và SameSite.
Gửi Cookies Với -b
-b là dạng ngắn của --cookie. Khi đối số của nó chứa một dấu "=" , curl coi giá trị đó là dữ liệu cookie thay vì tên tệp.
bash
curl --silent \
--cookie "theme=dark; view=compact" \
https://httpbingo.org/cookies
Điểm kiểm tra công khai phản hồi lại những cookie nó nhận được:
json
{
"cookies": {
"theme": "dark",
"view": "compact"
}
}
Các giá trị tĩnh thì tiện lợi cho các sở thích vô hại. Đừng đặt một định danh phiên thực sự trên một dòng lệnh chia sẻ: lịch sử shell, kiểm tra quy trình, ghi âm terminal, và logs CI có thể đều phơi bày nó.
Đọc Set-Cookie Mà Không Trộn Nó Vào Nội Dung
Set-Cookie là một tiêu đề phản hồi, vì vậy hãy kiểm tra nó riêng biệt với nội dung phản hồi. --dump-header - ghi lại các tiêu đề vào đầu ra chuẩn, và --output /dev/null loại bỏ nội dung.
bash
curl --silent \
--dump-header - \
--output /dev/null \
"https://httpbingo.org/cookies/set?theme=dark"
Phản hồi trực tiếp trả về một chuyển hướng HTTP và tiêu đề này:
text
set-cookie: theme=dark; Path=/; HttpOnly; Secure
HttpOnly ngăn JavaScript trên trình duyệt đọc giá trị; nó không ngăn một khách hàng HTTP lưu trữ và gửi cookie. Secure giới hạn việc truyền tải đến phương tiện vận chuyển an toàn. Không thuộc tính nào biến cookie thành một quyền cấp phép — máy chủ vẫn quyết định những gì phiên có thể truy cập.
Ghi và Tái Sử Dụng Một Cookie Jar
Một cookie jar bảo tồn các thuộc tính của máy chủ theo định dạng tệp cookie Netscape. Sử dụng -c trên phản hồi thiết lập trạng thái, sau đó -b trên yêu cầu cần nó.
bash
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
Lệnh thứ hai đã trả về:
json
{
"cookies": {
"demo_session": "authorized"
}
}
Khi máy chủ có thể cập nhật phiên, hãy đọc và ghi cùng một tệp:
bash
curl --silent --location \
--cookie "$COOKIE_JAR" \
--cookie-jar "$COOKIE_JAR" \
https://httpbingo.org/cookies
Jar được ghi lại khi việc truyền tải hoàn tất. Giữ nó trên một hệ thống tệp riêng tư và xóa nó sau khi công việc được ủy quyền kết thúc.
Bắt đầu Thu thập Dữ liệu với Scrapeless
Nâng cao quy trình thu thập dữ liệu và tự động hóa của bạn với Scrapeless!
Đăng ký ngay hôm nay và nhận $5 tín dụng miễn phí — không yêu cầu thẻ tín dụng.
Nhận tín dụng miễn phí của bạn ngay bây giờ trong Bảng điều khiển Scrapeless.

Nhiều Cookie và Quy tắc Miền/Đường dẫn
Engine cookie chỉ gửi những cookie có phạm vi phù hợp với yêu cầu. Một dòng jar ghi lại miền, có bao gồm các miền phụ hay không, đường dẫn, cờ Secure, thời hạn, tên và giá trị.
Cookie thử nghiệm công khai được ghi lại trông như thế này:
text
#HttpOnly_httpbingo.org FALSE / TRUE 0 demo_session authorized
Tiền tố #HttpOnly_ là dấu hiệu định dạng tệp của curl cho một cookie HttpOnly. FALSE có nghĩa là miền không bao gồm các miền phụ, / là đường dẫn phù hợp, TRUE đánh dấu giao thông Secure, và 0 đại diện cho một cookie phiên không có thời gian hết hạn vĩnh viễn.
Không mở rộng miền hoặc đường dẫn để làm cho yêu cầu hoạt động. Phạm vi là một ranh giới bảo mật. Một cookie cho một máy chủ ứng dụng không nên được sao chép sang một máy chủ không liên quan, và một cookie bị hạn chế theo đường dẫn nên giữ nguyên trong phạm vi đường dẫn.
Bảo mật, HttpOnly và SameSite
Các thuộc tính cookie trả lời các câu hỏi khác nhau, vì vậy hãy xem xét chúng một cách độc lập.
| Thuộc tính | Điều gì điều khiển | Ý nghĩa curl |
|---|---|---|
Secure |
Cookie có đi qua giao thông bảo mật hay không | curl sẽ không gửi nó qua HTTP thông thường |
HttpOnly |
JavaScript của trình duyệt có thể đọc nó hay không | curl lưu giữ dấu hiệu trong jar của nó |
SameSite |
Trình duyệt có gửi nó trong các ngữ cảnh xuyên trang hay không | một client HTTP dòng lệnh không tái tạo mô hình ngữ cảnh toàn diện của trình duyệt |
Domain |
Phạm vi máy chủ nào có thể nhận nó | curl khớp với máy chủ yêu cầu |
Path |
Những đường dẫn URL nào có thể nhận nó | curl khớp với đường dẫn yêu cầu |
Đối với các phiên được ủy quyền, hãy tuân thủ các kiểm soát quản lý phiên OWASP: bảo vệ các định danh khi nghỉ ngơi và trong quá trình truyền tải, xoay vòng chúng qua ứng dụng, và làm cho việc chấm dứt có hiệu lực ở phía máy chủ.
Gỡ lỗi Tiêu đề Cookie mà Không Rò Rỉ
--verbose cho thấy các tiêu đề yêu cầu xuất phát, bao gồm Cookie. Điều đó làm cho nó hữu ích và nguy hiểm.
Chỉ sử dụng đầu ra chi tiết trong một terminal cục bộ riêng tư với các giá trị trình diễn. Trong các nhật ký chia sẻ, xác nhận tên và phạm vi từ jar trong khi che giấu các giá trị:
bash
awk 'BEGIN { FS="\t" } !/^#/ && NF >= 7 { print $1, $3, $6, "[REDACTED]" }' "$COOKIE_JAR"
Nếu máy chủ trả về 401, trước tiên hãy xác nhận rằng curl đã chọn cookie mong đợi cho máy chủ và đường dẫn. Nếu máy chủ trả về 403, phiên có thể đã được xác thực nhưng không được cấp quyền cho tài nguyên đó. Không có trạng thái nào biện minh cho việc thay đổi phạm vi tài khoản hoặc sao chép phiên của người dùng khác.
Khi curl Không Đủ
curl là một client HTTP, không phải là một môi trường runtime của trình duyệt. Nó không thực thi JavaScript phía client, không hiển thị một widget đăng nhập, không đáp ứng một lễ nghi khóa truy cập, hoặc không cho phép một người duyệt qua một nhắc nhở MFA.
Các luồng chỉ dành cho trình duyệt cũng phụ thuộc vào trạng thái ngoài cookie: lưu trữ nguồn gốc, các worker dịch vụ, yêu cầu được tạo ra bằng JavaScript, thông tin xác thực gắn với thiết bị, và chuyển hướng tương tác. Việc tái tạo chỉ tiêu đề Cookie do đó có thể tạo ra một phiên không hoàn chỉnh hoặc không hợp lệ.
Sử dụng curl cho các luồng HTTP đã được ghi nhận và các API được kiểm soát. Sử dụng phiên trình duyệt đã được phê duyệt khi ứng dụng yêu cầu hành vi của trình duyệt.
Tiếp tục Quy trình với Scrapeless
Trình duyệt thu thập dữ liệu Scrapeless cung cấp một trình duyệt đám mây cho các quy trình được hiển thị bằng JavaScript và tương tác. Nó không chuyển đổi một cookie curl không được ủy quyền thành quyền truy cập.
Việc chuyển giao an toàn là một phiên mới: tạo trình duyệt đám mây, để cho một người vận hành được ủy quyền hoàn thành bất kỳ đăng nhập nào hoặc ranh giới MFA cần thiết, rồi giữ lại công việc đã được phê duyệt trong phiên đó. Kết nối SDK chính xác yêu cầu khóa API Scrapeless của bạn.
Lưu ý: Khối sau yêu cầu
SCRAPELESS_API_KEYvà một mục tiêu được ủy quyền. Môi trường xác minh cục bộ đã xác nhận giao diện SDK đã cài đặt nhưng không thực hiện một phiên đám mây đã được xác thực.
javascript
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();
Trang Trình duyệt Thu thập không Rác giải thích ranh giới của trình duyệt quản lý. Kiểm tra giá cả Scrapeless, giữ SDK đồng bộ với tài liệu Scrapeless, và sử dụng quy trình tải xuống Puppeteer khi trình duyệt phải tạo ra một tệp thay vì một nội dung phản hồi HTTP.
Kết luận: Giữ Trạng thái Phiên một cách Cẩn thận
Bánh quy curl có thể dự đoán được khi bạn tách luồng thành nhận, lưu trữ, khớp, gửi và hủy. Sử dụng -c để ghi lại trạng thái máy chủ, -b để tái sử dụng nó, và một bình chứa riêng khi có nhiều hơn một lệnh tham gia.
Khi quy trình làm việc vượt vào JavaScript, xác thực tương tác, hoặc thông tin xác thực gắn liền với trình duyệt, ngừng đối xử với phiên như một bài tập tiêu đề. Tạo một phiên trình duyệt được phê duyệt và giữ phạm vi của nó rõ ràng.
Sẵn sàng để Xây dựng Quy trình Trình duyệt An toàn hơn?
Tham gia cộng đồng của chúng tôi để so sánh các mẫu xử lý phiên với các nhà phát triển xây dựng tự động hóa được ủy quyền: Discord · Telegram.
Đăng ký tại app.scrapeless.com để nhận thời gian chạy Trình duyệt Thu thập miễn phí và di chuyển các bước chỉ trình duyệt vào trong một phiên được quản lý.
Câu hỏi thường gặp
H: curl -b làm gì?
curl -b kích hoạt động cơ cookie và cung cấp một chuỗi cookie nguyên văn hoặc một tệp cookie cho yêu cầu.
H: curl -c làm gì?
curl -c ghi lại các cookie đủ điều kiện vào một bình chứa cookie khi việc chuyển giao hoàn tất. Kết hợp nó với -b khi cùng một tệp cần phải được đọc và cập nhật.
H: Bình chứa cookie curl có an toàn để cam kết không?
Không. Một bình chứa cookie có thể chứa thông tin xác thực phiên hoạt động và nên ở ngoài hệ thống kiểm soát nguồn với quyền truy cập tệp hạn chế.
H: Tại sao curl không gửi cookie từ bình chứa?
Cookie có thể đã hết hạn hoặc có thể không khớp với tên miền, đường dẫn hoặc yêu cầu vận chuyển an toàn của yêu cầu. Kiểm tra các thuộc tính đó mà không in giá trị.
H: Curl có thể hoàn thành xác thực đa yếu tố (MFA) hoặc đăng nhập bằng khóa bảo mật không?
Không. MFA tương tác và lễ nghi khóa bảo mật yêu cầu một trình duyệt và, thường, một người được ủy quyền để phê duyệt bước này.
H: Scrapeless có thể nhập mọi bình chứa cookie curl không?
Không. Các phiên trình duyệt có thể phụ thuộc vào nhiều hơn cả cookie, vì vậy mẫu tổng quát an toàn là bắt đầu một phiên trình duyệt được ủy quyền mới và hoàn thành xác thực cần thiết bên trong nó.
H: Một quy trình làm việc phiên nên sử dụng bao nhiêu đồng thời?
Giữ không quá ba công nhân trên mỗi máy chủ cho đến khi chủ sở hữu ứng dụng phê duyệt một giới hạn khác, và cách ly trạng thái phiên của mỗi công nhân.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.



