cURL ngăn chặn cơ quan phản hồi


110

Có thể hướng dẫn cURL để ngăn chặn đầu ra của cơ thể phản hồi?

Trong trường hợp của tôi, phần thân phản hồi là một trang HTML, làm tràn bộ đệm CLI, gây khó khăn cho việc tìm kiếm thông tin liên quan. Tôi muốn kiểm tra các phần khác của đầu ra như mã phản hồi HTTP, tiêu đề, v.v. - mọi thứ ngoại trừ HTML thực tế.

Câu trả lời:


117

Bạn có thể sử dụng công -otắc và nulltệp giả:

Unix

curl -s -o /dev/null -v http://google.com

các cửa sổ

curl -s -o nul -v http://google.com

1
... nếu bạn đang sử dụng Unix ;-) Đối với Windows, bạn có thể muốn sử dụng nul. Đây là liên kết đến tài liệu, có lẽ BaltoStar cảm thấy thôi thúc phải đọc trước khi hỏi lần sau ;-) curl.haxx.se/docs/manpage.html
Marged

3
Không có gì. Nhưng đó là "nul", "null" sẽ tạo một tệp với tên đó
Được đánh dấu vào

1
trong thực tế, tôi đã đọc trang người đàn ông trước khi đăng và thử -s -o nulnhưng trên máy tính windows của tôi curl -s -o nul -v http://{internal-host}/{internal-uri}xuất ra toàn bộ html của trang - tôi đã thử curl -s -o nul -v http://google.comvà nó không xuất hiện như mong đợi, vì vậy tôi không hiểu tại sao điều này không hoạt động cho trang web nội bộ của tôi
BaltoStar

-ochỉ định một URL đầu ra: nếu bạn có nhiều url, nó sẽ chỉ loại bỏ đầu tiên :(
Simon Buchan

1
Phụ thuộc vào không di động NUL/dev/null. Sử dụng -sIXGETIMO là một lựa chọn tốt hơn.
binki

45

Đây là một cách để loại bỏ tất cả đầu ra và tiêu đề cuộn tròn, với tùy chọn vẫn hiển thị lỗi nếu chúng xảy ra. Hữu ích cho các công việc cron hoặc kiểm tra tự động.

Unix

Để tắt tất cả đầu ra:

curl --silent --output /dev/null http://example.com

Để chặn đầu ra nhưng vẫn hiển thị lỗi nếu chúng xảy ra:

curl --silent --output /dev/null --show-error --fail http://example.com

các cửa sổ

Để tắt tất cả đầu ra:

curl --silent --output nul http://example.com

Để chặn đầu ra nhưng vẫn hiển thị lỗi nếu chúng xảy ra:

curl --silent --output nul --show-error --fail http://example.com

Các thông số được giải thích

--silentngăn chặn các thống kê trong quá trình tải xuống (nhưng vẫn sẽ hiển thị đầu ra HTML)
--output /dev/nullẩn đầu ra thành công
--show-errorhiển thị lỗi, ngay cả khi silentchế độ được bật
--failsẽ gây ra lỗi nếu phản hồi HTTP là mã lỗi (404, 500, v.v.) thay vì chỉ là DNS / Lỗi TCP.


CẬP NHẬT: Tôi nhận ra rằng tác giả ban đầu muốn kiểm tra tiêu đề và mã phản hồi của một yêu cầu hơn là làm im lặng mọi thứ . Xem câu trả lời của samael để biết chi tiết về cách làm điều đó.


2
Phụ thuộc vào không di động NUL/dev/null. Sử dụng -sIXGETIMO là một lựa chọn tốt hơn.
binki

1
Cảm ơn nhận xét @binki - họ thực sự làm những điều khác biệt. Cũng nhận ra rằng OP muốn kiểm tra các tiêu đề không hiển thị trong giải pháp của tôi. Tôi đã cập nhật câu trả lời của mình để phản ánh điều đó.
Simon East

1
Tôi đoán khi đọc lại bài đăng của OP, họ không nói rằng họ chỉ muốn xem tiêu đề. Họ có thể thực sự đang tìm kiếm curl -vo/dev/null/ curl -voNUL… và tôi không biết liệu có một biến thể di động của nó hay không, hrm… ;-).
binki

Có lệnh ngắn cho --fail không? Tôi nghĩ -sS là thứ chúng ta cần cho cả --silent và --show-error
Freedo

Vâng, đó là: curl -Ssfo /dev/null url. Nhưng hãy đối xử tốt với những người bảo trì trong tương lai.
Amit Naidu

29

Khi bạn muốn hiển thị tiêu đề nhưng ẩn nội dung phản hồi, bạn sẽ muốn sử dụng:

curl -sIXGET http://somedomain.com/your/url

Tôi đã sử dụng curl -I http://somedomain.com/your/urlđể chỉ hiển thị các tiêu đề phản hồi. Tuy nhiên, vấn đề với điều đó là nó thực hiện yêu cầu bằng HEADphương pháp không tốt khi bạn muốn kiểm tra một lệnh gọi API chỉ phản hồi một GETyêu cầu. Đây là những gì -X GETlà cho, nó thay đổi yêu cầu thành a GET.

Vì vậy, tóm lại:

-sẩn các thanh tiến trình khỏi đầu ra (đặc biệt hữu ích khi chuyển đường ống sang chương trình khác)
-Ihiển thị tiêu đề (nhưng đưa ra HEADyêu cầu)
-XGETchuyển đổi yêu cầu trở lại GETyêu cầu

xem: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/


2
Điều đó thực sự phức tạp; curl -ilàm chính xác những điều tương tự.
bfontaine

4
không, -ibao gồm tiêu đề HTTP trong đầu ra cũng như nội dung. Thử nó. curl -i http://google.comkhông giống nhưcurl -IXGET http://google.com
samael

Đối với mục đích của tôi (và của OP) curl -I urllà đủ và có tác dụng tương tự. Tôi chỉ cần kiểm tra xem url có phản hồi hay không. Câu hỏi này cũng chỉ đơn thuần là về ức chế cơ thể, điều HEADnày tốt.
Amit Naidu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.