LoginSignup
0
0

curlコマンドでRangeを指定して少しずつダウンロードするスクリプト

Posted at

はじめに

業務で必要だったので、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しか試してません
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0