curl bad request除非直接调用函数

时间:2013-05-24 09:49:38

标签: bash curl

当我使用bash获取网页时,我收到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

经过进一步调查后,两个字符串似乎并不完全相同。 当我做的时候

echo $(cmp -bl <(echo "$download") <(echo "http://www.curse.com/addons/wow/bagnon/704176"))

我得到了这个输出:

46 15 ^M 12 ^J

即生成的下载链接的最后一个字符是^ M,手动找到的下载链接的最后一个字符是^ J

1 个答案:

答案 0 :(得分:0)

由于某种原因,标题卷曲返回有mac文件结尾,因此导致它返回的链接在^M结束,当将其传递回curl时它吓坏了得到了错误的请求标题。

我通过将链接管道固定来修复它 sed -r 's/^M/^J/g'

NB: 我不能只输入“^ M”我必须按Ctrl + V和Ctrl + M / J来获得正确的字符。