bash を使用して Web ページをフェッチすると、400 Bad Request 応答ヘッダーが表示されますが、別の関数内で自分の関数を呼び出した場合のみですか?
get_download_page() {
[ $# -eq 1 ] || die "get_location: 1 argument expected, recieved $#"
page="$(get_page $1)/download"
echo "http://www.curse.com$(curl --silent -I $page | awk 'NR==4 { print; exit }' | cut -d\ -f2)"
}
get_page() {
[ $# -eq 1 ] || die "get_page: 1 argument expected, recieved $#"
echo "www.curse.com/addons/wow/$1"
}
get_file() {
[ $# -eq 1 ] || die "get_file: 1 argument expected, recieved $#"
echo $(curl -s $1 | sed -rn 's/.*data-href="([^"]+)".*/\1/p')
}
fetch_addon() {
[ $# -eq 1 ] || die "fetch_addon: 1 argument expected, recieved $#"
download=$(get_download_page $1)
file=$(get_file $download)
echo $file
}
いえ
呼び出すfetch_addon "bagnon"
と、不正なリクエスト ヘッダーが表示されます。
しかし、もしそうなら:get_file "http://www.curse.com/addons/wow/bagnon/704176"
http://addons.curse.cursecdn.com/files/704/176/Bagnon_5.3.zip
get_download_page "bagnon"
私が渡しているのと同じリンクを返しますが、どれが私が期待するものget_file
ですか?
次のように実行します。
get_download_page "bagnon"
echo "http://www.curse.com/addons/wow/bagnon/704176"
出力:
http://www.curse.com/addons/wow/bagnon/704176
http://www.curse.com/addons/wow/bagnon/704176
さらに調査した結果、2 つの文字列は厳密には等しくないようです。私がする時
echo $(cmp -bl <(echo "$download") <(echo "http://www.curse.com/addons/wow/bagnon/704176"))
私はこの出力を得る:
46 15 ^M 12 ^J
つまり、生成されたダウンロード リンクの最後の文字は ^M であり、手動で見つけたダウンロード リンクの最後の文字は ^J です。