0

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 です。

4

1 に答える 1

0

何らかの理由で、curl が返していたヘッダーに mac ファイルの末尾が含まれていたため、返されたリンクが^M.

リンクをパイプして修正しました sed -r 's/^M/^J/g'

注: 「^M」とだけ入力することはできませんでした。正しい文字を取得するには、Ctrl+V と Ctrl+M/J を押す必要がありました。

于 2013-05-24T13:06:32.683 に答える