🎯 Trình duyệt đám mây tùy chỉnh, chống phát hiện được hỗ trợ bởi Chromium tự phát triển, thiết kế dành cho trình thu thập dữ liệu webtác nhân AI. 👉Dùng thử ngay
Quay lại blog

Cách Gửi Tiêu Đề HTTP Bằng cURL: Hướng Dẫn Toàn Diện

Michael Lee
Michael Lee

Expert Network Defense Engineer

22-Sep-2025

Những điểm chính:

  • Các tiêu đề HTTP đóng vai trò quan trọng trong giao tiếp giữa client và server, truyền tải các siêu dữ liệu thiết yếu về yêu cầu và phản hồi.
  • cURL cung cấp tùy chọn -H hoặc --header để dễ dàng gửi các tiêu đề HTTP tùy chỉnh cùng với yêu cầu của bạn.
  • Bạn có thể gửi nhiều tiêu đề bằng cách sử dụng tùy chọn -H nhiều lần.
  • Hiểu biết và thao tác với các tiêu đề là rất quan trọng cho việc thu thập dữ liệu web, kiểm tra API và gỡ lỗi các vấn đề mạng.
  • Xem các tiêu đề phản hồi với cURL giúp trong việc gỡ lỗi và hiểu hành vi của server.

Giới thiệu

cURL (Client URL) là một công cụ dòng lệnh mạnh mẽ để truyền tải dữ liệu với các URL, hỗ trợ các giao thức như HTTP, HTTPS và FTP. Đối với các nhà phát triển và quản trị hệ thống, cURL là không thể thiếu. Khả năng gửi và nhận các tiêu đề HTTP của nó là cơ bản để xác định các tương tác giữa client và server. Hướng dẫn này cung cấp tổng quan toàn diện về cách gửi các tiêu đề HTTP với cURL, bao gồm nhiều kịch bản, ví dụ thực tiễn và các phương pháp tốt nhất.

Các tiêu đề HTTP là gì?

Các tiêu đề HTTP là một phần cơ bản của các yêu cầu và phản hồi HTTP, mang theo các siêu dữ liệu thiết yếu về giao dịch. Chúng hoạt động như phong bì và thông tin bưu phí cho một bức thư, trong khi nội dung là bức thư tự nó. Chúng cho phép các tính năng như bộ đệm, xác thực và đàm phán nội dung.

Các loại tiêu đề HTTP:

  • Tiêu đề yêu cầu: Được gửi bởi client (ví dụ: User-Agent, Authorization).
  • Tiêu đề phản hồi: Được gửi bởi server (ví dụ: Content-Type, Set-Cookie).
  • Tiêu đề chung: Áp dụng cho cả hai (ví dụ: Date, Connection).
  • Tiêu đề thực thể: Mô tả về nội dung (ví dụ: Content-Length).

Thao tác với các tiêu đề yêu cầu là điều quan trọng cho việc gỡ lỗi, kiểm tra API và mô phỏng các hành vi cụ thể của client.

Cú pháp cơ bản: Gửi một tiêu đề đơn

Để gửi một tiêu đề HTTP với cURL, sử dụng tùy chọn -H hoặc --header theo sau bởi "Tên-Tiêu-Đề: Giá-Trị-Tiêu-Đề".

Cú pháp:

bash Copy
curl -H "Tên-Tiêu-Đề: Giá-Trị-Tiêu-Đề" [URL]

Ví dụ 1: Cài đặt User-Agent tùy chỉnh

Ghi đè User-Agent mặc định của cURL để mô phỏng một trình duyệt web:

bash Copy
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" https://www.example.com

Điều này khiến yêu cầu có vẻ như phát sinh từ trình duyệt Chrome, hữu ích cho việc tương tác với các trang web chặn các user agent không phải trình duyệt.

Ví dụ 2: Cài đặt tiêu đề Accept

Chỉ định các loại nội dung ưa thích, chẳng hạn như JSON:

bash Copy
curl -H "Accept: application/json" https://api.example.com/data

Điều này yêu cầu dữ liệu ở định dạng JSON từ điểm cuối API.

Gửi nhiều tiêu đề HTTP

Gửi nhiều tiêu đề bằng cách sử dụng tùy chọn -H nhiều lần trong một lệnh duy nhất.

Cú pháp:

bash Copy
curl -H "Tên-Tiêu-Đề-1: Giá-Trị-Tiêu-Đề-1" \
     -H "Tên-Tiêu-Đề-2: Giá-Trị-Tiêu-Đề-2" \
     [URL]

Ví dụ 3: Yêu cầu POST với Xác thực và Content-Type

Đối với các cuộc gọi API, bao gồm các tiêu đề AuthorizationContent-Type:

bash Copy
curl -X POST \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -d '{"name": "John Doe", "age": 30}' \
     https://api.example.com/users

Điều này gửi một yêu cầu POST với dữ liệu JSON, được xác thực bằng mã thông báo bearer.

Ghi đè các tiêu đề mặc định

cURL gửi một số tiêu đề mặc định. Ghi đè chúng bằng cách chỉ định giá trị tùy chỉnh của bạn với -H. Tiêu đề tùy chỉnh của bạn sẽ có quyền ưu tiên.

Ví dụ 4: Ghi đè tiêu đề User-Agent

bash Copy
curl -H "User-Agent: MyCustomApp/1.0" https://www.example.com

Điều này xác định client của bạn là MyCustomApp/1.0 đối với server.

Ví dụ 5: Xóa một tiêu đề mặc định

Để xóa một tiêu đề mà cURL thường gửi, sử dụng dấu chấm phẩy mà không có giá trị:

bash Copy
curl -H "Accept-Encoding;" https://www.example.com

Điều này rõ ràng cho cURL biết không gửi tiêu đề Accept-Encoding.

Gửi tiêu đề với các phương thức HTTP khác nhau

cURL hỗ trợ tất cả các phương thức HTTP tiêu chuẩn bằng cách sử dụng tùy chọn -X, với các tiêu đề được thêm vào qua -H.

Ví dụ 6: Yêu cầu PUT với tiêu đề

bash Copy
curl -X PUT \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_AUTH_TOKEN" \
     -d '{"status": "active"}' \
     https://api.example.com/items/123

Điều này cập nhật một tài nguyên, đảm bảo việc giải thích nội dung đúng và xác thực.

Ví dụ 7: Yêu cầu DELETE với tiêu đề

bash Copy
curl -X DELETE \
     -H "Authorization: Bearer YOUR_AUTH_TOKEN" \
     https://api.example.com/items/456

Điều này thực hiện một yêu cầu DELETE đã xác thực cho một tài nguyên.

Xử lý Cookies với cURL

Cookies là các tiêu đề HTTP đặc biệt cho quản lý phiên. cURL cung cấp các tùy chọn cụ thể để gửi và nhận chúng.

Ví dụ 8: Gửi một Cookie

Sử dụng -H "Cookie: ..." hoặc tùy chọn thuận tiện hơn là -b (hoặc --cookie):

bash Copy
curl -b "session_id=abc123xyz" https://www.example.com/dashboard

Ví dụ 9: Lưu trữ và gửi Cookies từ một tệp
Đầu tiên, lưu cookie nhận được từ máy chủ vào cookies.txt:

bash Copy
curl -c cookies.txt https://www.example.com/login

Sau đó, gửi những cookie này trong các yêu cầu tiếp theo:

bash Copy
curl -b cookies.txt https://www.example.com/profile

Điều này rất quan trọng để mô phỏng phiên làm việc của người dùng đã đăng nhập.

Xem Header Phản Hồi

Việc xem header phản hồi là rất quan trọng để gỡ lỗi và hiểu hành vi của máy chủ. Sử dụng -i hoặc -I.

Ví dụ 10: Xem Tất Cả Header Phản Hồi và Thân

Sử dụng -i (hoặc --include) để hiển thị cả header và thân phản hồi:

bash Copy
curl -i https://www.example.com

Ví dụ 11: Xem Chỉ Header Phản Hồi (Yêu Cầu HEAD)

Sử dụng -I (hoặc --head) để gửi yêu cầu HEAD và chỉ nhận header, không có thân:

bash Copy
curl -I https://www.example.com

Điều này rất hiệu quả để kiểm tra trạng thái tài nguyên hoặc header bộ nhớ đệm.

Ví dụ 12: Lưu Header Vào Tệp

Sử dụng -D hoặc --dump-header để lưu header phản hồi vào tệp:

bash Copy
curl -D headers.txt https://www.example.com

Điều này lưu header vào headers.txt trong khi in thân ra đầu ra chuẩn.

Trường Hợp Sử Dụng Thực Tế Để Gửi HTTP Headers Với cURL

Header tùy chỉnh là không thể thiếu cho nhiều ứng dụng:

1. Kiểm Tra và Gỡ Lỗi API

Gửi các header cụ thể cho xác thực hoặc tham số tùy chỉnh để kiểm tra các điểm cuối API.

Ví dụ: Kiểm tra API với X-API-Key.

bash Copy
curl -H "X-API-Key: your_secret_api_key" https://api.example.com/v1/data

2. Phân Tích Web và Trích Xuất Dữ Liệu

Bắt chước một trình duyệt thực sự để tránh bị phát hiện bằng cách đặt các header User-Agent, RefererCookie.

Ví dụ: Thu thập dữ liệu với User-Agent giống như trình duyệt và cookie phiên.

bash Copy
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, như Gecko) Chrome/108.0.0.0 Safari/537.36" \
     -b "session_id=your_session_id" \
     https://www.example.com/protected_data

3. Mô Phỏng Hành Vi Trình Duyệt

Mô phỏng các tương tác như gửi biểu mẫu, nơi header đóng vai trò quan trọng.

Ví dụ: Mô phỏng gửi một biểu mẫu với application/x-www-form-urlencoded.

bash Copy
curl -X POST \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "username=testuser&password=testpass" \
     https://www.example.com/login

4. Kiểm Tra Cấu Hình Máy Chủ Web

Kiểm tra cấu hình máy chủ, chính sách bộ nhớ đệm và cài đặt bảo mật.

Ví dụ: Kiểm tra hành vi bộ nhớ đệm với If-Modified-Since.

bash Copy
curl -I -H "If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT" https://www.example.com/static/image.jpg

Các Thực Hành Tốt Nhất và Khắc Phục Sự Cố

Để đảm bảo việc sử dụng cURL với HTTP headers hiệu quả và có trách nhiệm, hãy xem xét những thực hành tốt nhất và mẹo khắc phục sự cố sau:

Thực Hành Tốt Nhất:

  • Cụ Thể: Chỉ gửi những header cần thiết. Header quá mức có thể kích hoạt cơ chế chống bot.
  • Sử Dụng User-Agent Khôn Ngoan: Bắt chước một trình duyệt phổ biến để thu thập dữ liệu web để tránh bị chặn, nhưng hãy cẩn thận với việc phát hiện bot có mục tiêu.
  • Quản Lý Cookie Chính Xác: Sử dụng tùy chọn -c (cookie-jar) và -b (cookie) cho quản lý phiên, thay vì header Cookie thủ công.
  • Kiểm Tra Phản Hồi: Luôn sử dụng -i hoặc -I để xem header phản hồi cho việc gỡ lỗi và hiểu hành vi máy chủ.
  • Mã Hóa URL: Mã hóa đúng cách các tham số trong chuỗi truy vấn hoặc dữ liệu biểu mẫu để tránh sự cố với các ký tự đặc biệt.
  • Tôn Trọng robots.txt: Về mặt đạo đức, kiểm tra và tuân thủ hướng dẫn robots.txt của một trang web cho các tác vụ tự động.

Khắc Phục Các Vấn Đề Phổ Biến:

  • Lỗi "403 Forbidden" hoặc "401 Unauthorized":
    • Xác minh header Authorization (tính hợp lệ của token).
    • Kiểm tra các header User-AgentReferer.
    • Cân nhắc việc chặn IP; sử dụng proxy hoặc chờ đợi.
  • Nội Dung Không Chính Xác hoặc Phản Hồi Trống:
    • Xác nhận các header Content-TypeAccept khớp với mong đợi của máy chủ.
    • Kết xuất JavaScript: cURL truy xuất HTML thô. Nếu nội dung được kết xuất bằng JS, hãy xem xét các trình duyệt headless hoặc API thu thập dữ liệu chuyên dụng.
    • Theo Dõi Chuyển Hướng: Sử dụng -L hoặc --location để khiến cURL theo dõi các chuyển hướng HTTP 3xx.
  • Thời Gian Kết Nối Hoặc Kết Nối Bị Từ Chối:
    • Đảm bảo URL đúng và máy chủ có thể truy cập được.
    • Kiểm tra tường lửa địa phương hoặc proxy mạng.
    • Máy chủ có thể tạm thời không hoạt động hoặc quá tải.

Sử dụng tùy chọn đầu ra chi tiết (-v) trong cURL có thể cung cấp thông tin chi tiết quý giá để gỡ lỗi.

Kết Luận và Kêu Gọi Hành Động

Gửi HTTP headers với cURL là một kỹ năng cơ bản cho bất kỳ ai làm việc với công nghệ web. Từ việc thao tác với User-Agent cơ bản đến các cơ chế xác thực phức tạp và quản lý cookie, cURL cung cấp độ linh hoạt và sức mạnh để tạo ra các yêu cầu HTTP chính xác. Làm chủ những kỹ thuật này là rất cần thiết cho việc kiểm tra API hiệu quả, thu thập dữ liệu web mạnh mẽ và gỡ lỗi mạng toàn diện.
Bằng cách hiểu vai trò của từng tiêu đề và sử dụng các tùy chọn linh hoạt của cURL, bạn có thể kiểm soát tốt hơn các tương tác giữa client-server của mình. Hãy nhớ luôn tuân theo các quy tắc tốt nhất, tôn trọng chính sách của website và tận dụng các tính năng gỡ lỗi của cURL để đảm bảo rằng các yêu cầu của bạn vừa hiệu quả vừa có trách nhiệm.

Bạn đã sẵn sàng nâng cao kỹ năng cURL của mình chưa?

Hãy thử nghiệm với các ví dụ có trong hướng dẫn này, khám phá tài liệu phong phú của cURL và tích hợp những kỹ thuật này vào quy trình làm việc hàng ngày của bạn. Khả năng kiểm soát chính xác các tiêu đề HTTP chắc chắn sẽ khiến bạn trở thành một chuyên gia web hiệu quả và có khả năng hơn.

Câu hỏi thường gặp (FAQ)

Q1: Sự khác biệt giữa -H-b khi gửi tiêu đề là gì?

-H (hoặc --header) là tùy chọn đa mục đích để gửi bất kỳ tiêu đề HTTP tùy chỉnh nào theo định dạng "Tên-Tiêu-Đề: Giá-Trị-Tiêu-Đề". -b (hoặc --cookie) là dành riêng cho việc gửi cookie, thường tiện lợi hơn khi thường xuyên xử lý cookie, đặc biệt là từ một tệp.

Q2: Làm thế nào để tôi có thể xem tất cả các tiêu đề mà cURL gửi theo mặc định?

Sử dụng tùy chọn -v (hoặc --verbose) với lệnh cURL của bạn. Điều này cung cấp đầu ra chi tiết, bao gồm yêu cầu đầy đủ mà cURL gửi (với tất cả các tiêu đề mặc định), quá trình kết nối và phản hồi đầy đủ từ server.

Q3: cURL có thể xử lý các tiêu đề HTTP/2 hoặc HTTP/3 không?

Có, cURL hỗ trợ HTTP/2 và HTTP/3 (QUIC). Nó thường tự động thương lượng để sử dụng các giao thức này. Tùy chọn -H để chỉ định tiêu đề vẫn giữ nguyên, vì cURL xử lý khung cụ thể cho giao thức bên trong.

Q4: Làm thế nào để tôi gửi một tiêu đề với giá trị trống?

Để gửi một tiêu đề với giá trị trống, hãy chỉ định nó dưới dạng "Tên-Tiêu-Đề:" (với dấu hai chấm nhưng không có giá trị). Để xóa một tiêu đề mà cURL thường gửi, sử dụng "Tên-Tiêu-Đề;" (với dấu chấm phẩy), điều này chỉ cho cURL không gửi tiêu đề đó hoàn toàn.

Q5: Có thể gửi các ký tự không phải ASCII trong tiêu đề không?

Các tiêu đề HTTP truyền thống chỉ là ASCII. Các ký tự không phải ASCII nên được mã hóa URL hoặc mã hóa Base64, tùy thuộc vào tiêu đề và cách sử dụng của nó. Trong hầu hết các trường hợp thông thường, việc giữ lại ASCII trong các giá trị tiêu đề là điều được khuyến nghị để đảm bảo tương thích.

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.

Bài viết phổ biến nhất

Danh mục