2012-09-20 34 views
18

Tôi hiện đang viết một tập lệnh bash và tôi đang sử dụng curl. Những gì tôi muốn làm là có được một tiêu đề cụ thể của một phản ứng.Giá trị Curl "write out" của tiêu đề cụ thể

Về cơ bản tôi muốn lệnh này để làm việc:

curl -I -w "%{etag}" "server/some/resource" 

Đáng tiếc là nó có vẻ như nếu -w, tùy chọn --write-out chỉ có một tập hợp các biến nó hỗ trợ và không thể in bất kỳ tiêu đề đó là một phần của phản ứng. Tôi có cần phải phân tích cú pháp đầu ra curl để có được giá trị ETag hay có cách nào đó để làm cho giá trị của một đầu trang cụ thể không?

Rõ ràng cái gì đó như

curl -sSI "server/some/resource" | grep 'ETag:' | sed -r 's/.*"(.*)".*/\1/' 

hiện các trick, nhưng nó sẽ đẹp hơn để có bộ lọc curl tiêu đề.

Trả lời

10

Các biến được chỉ định cho "-w" không được kết nối trực tiếp với tiêu đề http. Vì vậy, có vẻ như bạn phải "phân tích" chúng trên của riêng bạn:

curl -I "server/some/resource" | grep -Fi etag 
15

Bạn có thể in một tiêu đề cụ thể với một lệnh sed hay awk duy nhất, nhưng tiêu đề HTTP sử dụng kết thúc dòng CRLF.

curl -sI stackoverflow.com | tr -d '\r' | sed -En 's/^Content-Type: (.*)/\1/p' 

Với awk bạn có thể thêm FS=": " nếu các giá trị chứa khoảng trắng:

awk 'BEGIN {FS=": "}/^Content-Type/{print $2}' 
Các vấn đề liên quan