2017-05-13 6 views
1

私はHTTP_CODE size_header REDIRECT_URLを取得するためにカールを使用し、ウェブサイトのタイトルとしています:Curlを使ってレスポンスの最初の20文字を出力するには?

#!/bin/bash 
FILE="$1" 
while read LINE; do 
    curl -H 'Cache-Control: no-cache' -i -s -k -o >(perl -l -0777 -ne 'print $1 if /<title.*?>\s*(.*?)\s*<\/title/si') --silent --max-time 2 --write-out '%{http_code} %{size_header} %{redirect_url} ' "$LINE" 
     echo " $LINE" 
    done < ${FILE} 

が、私はまた、より多くの情報を持っている応答から最初の20個の文字を取得したいです。

アイデアは、私が唯一の出力に$ website_first_20_bytesを追加する必要があり、この出力

%{http_code} %{size_header} %{redirect_url} $website_title $website_first_20_bytes 

を取得することです。どうすればこれを達成できますか?

PS:ヘッダーレスポンスの最初の20文字はありません。ソースのみ。

+0

あなたが必要だということです何明確ではありません。あなたは '$ LINE'から最初の20文字だけを欲しいですか? – Inian

+0

はい。それだけで。 その出力を得るために – pancho

答えて

0

ですから、おそらくこのような何かを意味し、その後(私はあなたのようにトリミングすることができ、出力するなどの改行の束をしてください追加):

#!/bin/bash 
FILE="$1" 
while read -r LINE; do 
    # read the response to a variable 
    response=$(curl -H 'Cache-Control: no-cache' -s -k --max-time 2 --write-out '%{http_code} %{size_header} %{redirect_url} ' "$LINE") 
    # get the title 
    title=$(sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'<<<"$response") 
    # read the write-out from the last line 
    read -r http_code size_header redirect_url < <(tail -n 1 <<<"$response") 
    printf "Status: %s\n" "$http_code" 
    printf "Size: %s\n" "$size_header" 
    printf "Redirect-url: %s\n" "$redirect_url" 
    printf "Url: %s\n" "$LINE" 
    printf "Title: %s" "$title" 
    # -c 20 only shows the 20 first chars from response 
    printf "Body: %s" "$(head -c 20 <<<"$response")" 
done < ${FILE} 
+0

ありがとう、オリーK、非常にクール。それは素晴らしい作品です。私も学ぶ:) – pancho

関連する問題