วิธีของฉันที่จะบรรลุสิ่งนี้ :
ในการรับทั้ง (ส่วนหัวและส่วนเนื้อหา) ฉันมักจะแสดงcurl -D- <url>
เป็น:
$ 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"]}
สิ่งนี้จะถ่ายโอนข้อมูลส่วนหัว ( -D
) ไปยัง stdout ( -
) (มองหา--dump-header
ในman curl )
IMHO ยังมีประโยชน์มากในบริบทนี้:
ฉันมักจะใช้jqเพื่อรับข้อมูล json นั้น (เช่นจาก API ที่เหลือบางส่วน) ในรูปแบบ แต่เป็น JQ ไม่คาดว่าจะมีส่วนหัว HTTP, เคล็ดลับคือการพิมพ์ส่วนหัวเพื่อ stderr -D/dev/stderr
ใช้ โปรดทราบว่าครั้งนี้เรายังใช้-sS
(--silent, --show-error) เพื่อระงับตัววัดความคืบหน้า (เพราะเราเขียนไปยังไพพ์)
$ 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"
]
}
ฉันเดาว่าสิ่งนี้มีประโยชน์เช่นกันหากคุณต้องการพิมพ์ส่วนหัว (เพื่อการตรวจสอบอย่างรวดเร็ว) เพื่อคอนโซล แต่เปลี่ยนเส้นทางเนื้อหาไปยังไฟล์ (เช่นเมื่อไบนารีบางประเภทไม่ทำให้เทอร์มินัลของคุณสับสน):
$ 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
ระวัง: นี่ไม่เหมือนกับcurl -I <url>
! ตามที่-I
จะดำเนินการHEAD
ตามคำขอไม่ใช่GET
คำขอ (มองหา--head
ในman curlใช่: สำหรับเซิร์ฟเวอร์ HTTP ส่วนใหญ่สิ่งนี้จะให้ผลลัพธ์เหมือนกัน แต่ฉันรู้จักแอปพลิเคชันทางธุรกิจจำนวนมากที่ไม่ได้ใช้HEAD
คำขอเลย ;-P