CURL'nin çıktısını nasıl grep edersiniz?


70

Bir SSL sertifikasının son kullanma tarihini almam gerekiyor. curlUygulama, bu bilgileri sağlamak yapar:

$ curl -v https://google.com/
* Hostname was NOT found in DNS cache
*   Trying 212.179.180.121...
* Connected to google.com (212.179.180.121) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using ECDHE-ECDSA-AES128-GCM-SHA256
* Server certificate:
*        subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=*.google.com
*        start date: 2014-10-22 13:04:07 GMT
*        expire date: 2015-01-20 00:00:00 GMT
*        subjectAltName: google.com matched
*        issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*        SSL certificate verify ok.
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: google.com
> Accept: */*
> 
< HTTP/1.1 302 Found
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Location: https://www.google.co.il/?gfe_rd=cr&ei=HkxbVMzCM-WkiAbU6YCoCg
< Content-Length: 262
< Date: Thu, 06 Nov 2014 10:23:26 GMT
* Server GFE/2.0 is not blacklisted
< Server: GFE/2.0
< 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.il/?gfe_rd=cr&amp;ei=HkxbVMzCM-WkiAbU6YCoCg">here</A>.
</BODY></HTML>
* Connection #0 to host google.com left intact

Ancak, çıktıyı grepsonuç üzerinden iletirken, ekranda daha az bilgi olması değil , çok daha fazlası :

$ curl -v https://google.com/ | grep expire
* Hostname was NOT found in DNS cache
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 212.179.180.84...
* Connected to google.com (212.179.180.84) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
} [data not shown]
* SSLv3, TLS handshake, Server hello (2):
{ [data not shown]
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* SSLv3, TLS handshake, CERT (11):
{ [data not shown]
* SSLv3, TLS handshake, Server key exchange (12):
{ [data not shown]
* SSLv3, TLS handshake, Server finished (14):
{ [data not shown]
* SSLv3, TLS handshake, Client key exchange (16):
} [data not shown]
* SSLv3, TLS change cipher, Client hello (1):
} [data not shown]
* SSLv3, TLS handshake, Finished (20):
} [data not shown]
* SSLv3, TLS change cipher, Client hello (1):
{ [data not shown]
* SSLv3, TLS handshake, Finished (20):
{ [data not shown]
* SSL connection using ECDHE-ECDSA-AES128-GCM-SHA256
* Server certificate:
*        subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=*.google.com
*        start date: 2014-10-22 13:04:07 GMT
*        expire date: 2015-01-20 00:00:00 GMT
*        subjectAltName: google.com matched
*        issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*        SSL certificate verify ok.
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: google.com
> Accept: */*
> 
< HTTP/1.1 302 Found
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Location: https://www.google.co.il/?gfe_rd=cr&ei=IkxbVMy4K4OBbKuDgKgF
< Content-Length: 260
< Date: Thu, 06 Nov 2014 10:23:30 GMT
* Server GFE/2.0 is not blacklisted
< Server: GFE/2.0
< 
{ [data not shown]
100   260  100   260    0     0    714      0 --:--:-- --:--:-- --:--:--   714
* Connection #0 to host google.com left intact

I şüpheli olduğu curlbir terminale baskı olmadığı tespit eder ve dolayısıyla tarafından tanınan tüm olan farklı çıkış verir grepşekilde varlık stdoutve böylece terminale geçirilir. Ancak, bulabildiğim en yakın şey man curl (bunun için hiç google!) Şudur :

PROGRESS METER
   curl  normally  displays  a  progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time
   left, etc.

   curl displays this data to the terminal by default, so if you invoke curl to do an operation and it is about to write data to the  terminal,
   it disables the progress meter as otherwise it would mess up the output mixing progress meter and response data.

   If you want a progress meter for HTTP POST or PUT requests, you need to redirect the response output to a file, using shell redirect (>), -o
   [file] or similar.

   It is not the same case for FTP upload as that operation does not spit out any response data to the terminal.

   If you prefer a progress "bar" instead of the regular meter, -# is your friend.

Çıktıdan yalnızca expiryçizgiyi nasıl alabilirim curl? Ayrıca, durumu daha iyi anlamak için ne okumalıyım?

Görünüşe göre bu bir "stdmeta" dosya tanıtıcısı için iyi bir kullanım durumudur .



@EladKarako: Teşekkürler. Güzel bir cevap, ama bu durum için geçerli değil. Belki de Windows kabuğunun ayrı bir çıktı dosyası işleyicisi kavramı yoktur, ancak bu, Linux kabukları için farklı bir durumdur.
dotancohen

1
Rüzgâra karşı dikkatli olmaya mecbur kaldım ve Google adamı kıvırdı. Bazı değerli sonuçlar döndürmek zorunda olduğuna eminim.
JeremyCanfield

Yanıtlar:


105

curl, çıktıyı stderr'ye yazar, bu yüzden onu yönlendir ve ilerlemeyi bastır:

curl -v --silent https://google.com/ 2>&1 | grep expire

Bilgiyi stderr'e curlyazmasının nedeni , yapabileceklerinizdir:
curl <url> | someprgrambu bilgi olmadan girişini engellemek.someprogram


2
-v ayrıntılı hile yapar .. teşekkürler
astroanu

2
-vsana gerek yok , oldukça fazla metin yazacaksın .. özellikle çoklu yönlendirme ve SSL anlaşmaları ve sertifika alışverişinde! ya --includesadece başlıkları yanıtlayanın gövdesine eklemek için kullanmalı ya da daha iyisi kullanmalısınız --head, ayrıca \rdeğeri bir değişkende saklamayı planlıyorsanız daha sonra en iyisi kaldırmalısınız, hatta daha sonra çıktıya göndermelisiniz (bkz. yukarıdaki Content-Lengthörnekle yorum yapın )

19

--stderr -Çıktıyı stderr'den (varsayılan) stdout'a yönlendirmek için parametre olarak kullanmak mümkündür . Bu seçenekle --silent, ilerleme çubuğunu bastırmak için de kullanmanız gerekir .

$ curl -v --silent https://google.com/ --stderr - | grep expire
*    expire date: 2015-09-01 00:00:00 GMT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.