Cách của tôi để đạt được điều này :
Để có được cả hai (tiêu đề và nội dung), tôi thường thực hiện curl -D- <url>
như sau:
$ curl -D- http://localhost:1234/foo
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 20:59:21 GMT
{"data":["out.csv"]}
Thao tác này sẽ kết xuất tiêu đề ( -D
) thành stdout ( -
) (Tìm --dump-header
trong man curl ).
IMHO cũng rất tiện dụng trong bối cảnh này:
Tôi thường sử dụng jq để định dạng dữ liệu json (ví dụ: từ một số API còn lại). Nhưng vì jq không mong đợi một tiêu đề HTTP, mẹo là in tiêu đề để stderr sử dụng -D/dev/stderr
. Lưu ý rằng lần này chúng tôi cũng sử dụng -sS
(--silent, --show-error) để ngăn chặn đồng hồ đo tiến trình (vì chúng tôi viết vào một đường ống).
$ curl -sSD/dev/stderr http://localhost:1231/foo | jq .
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 21:08:22 GMT
{
"data": [
"out.csv"
]
}
Tôi đoán điều này cũng có thể hữu ích nếu bạn muốn in tiêu đề (để kiểm tra nhanh) vào bảng điều khiển nhưng chuyển hướng nội dung đến một tệp (ví dụ: khi một số loại nhị phân của nó để không làm rối thiết bị đầu cuối của bạn):
$ curl -sSD/dev/stderr http://localhost:1231 > /dev/null
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 21:20:02 GMT
Hãy lưu ý: Điều này KHÔNG giống với curl -I <url>
! Như -I
sẽ thực hiện một HEAD
yêu cầu chứ không phải một GET
yêu cầu (Hãy tìm --head
trong man curl . Có: Đối với hầu hết các máy chủ HTTP, điều này sẽ mang lại kết quả tương tự. Nhưng tôi biết rất nhiều ứng dụng kinh doanh không thực hiện HEAD
yêu cầu nào cả ;-P