はじめに
業務で必要だったので、ChatGPTに聞きながら作ってみました。
環境
- Almalinux8
スクリプト
ヘッダを見ることが目的だったので、ダウンロードしたコンテンツは全部、/dev/null
に捨ててます。
定数 FILE
にファイル名を指定することでファイルとして保存することもできます。
#!/bin/bash
URL="http://example.com/example.bin" # 取得したいコンテンツのURLを指定
PROXY="http://192.168.1.1:8080/"
FILE="/dev/null"
RANGE_SIZE=100000000
TMP_FILE="templa"
# コンテンツのサイズを最初に取得します
TOTAL_SIZE=$(curl -sI "${URL}" | awk '/Content-Length/ {print $2}' | tr -d '\r')
START_RANGE=0
END_RANGE=$((RANGE_SIZE - 1))
DOWNLOADED_SIZE=0
download_content() {
range_header="Range: bytes=${START_RANGE}-${END_RANGE}"
curl -v -o "${TMP_FILE}" -H "${range_header}" -x "${PROXY}" "${URL}" 1>/dev/null
}
[ -f ${FILE} ] && rm -f ${FILE}
while [ $DOWNLOADED_SIZE -lt $TOTAL_SIZE ]; do
download_content
cat ${TMP_FILE} >> ${FILE}
rm -f ${TMP_FILE}
DOWNLOADED_SIZE=$((DOWNLOADED_SIZE + RANGE_SIZE))
START_RANGE=$((END_RANGE + 1))
END_RANGE=$((START_RANGE + RANGE_SIZE - 1))
done
注意事項
- HTTPしか試してません