首先我要说的是,关于这个错误有很多疑问,但我几乎尝试了所有方法,但仍然无法解决。
url="https://cdn59.my.mail.ru/hv/55045204.mp4?sign=2cca46c09181dc952b3140f2ea3852d90cc2a19a&slave[]=s%3Ahttp%3A%2F%2F127.0.0.1%3A5010%2F55045204-hv.mp4&p=f&expire_at=1438858800&touch=1436155554®ion=76"
当我使用wget $url
它时出现错误 503 服务不可用。
然后我添加了我的用户代理wget -U 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36' $url
现在。它给了我 403 Forbidden 错误。我也尝试了header or --no-check-certificate
它们的组合,但仍然有一些烦人的错误。(该网址有一些元字符,因此我使用了单引号或双引号。)
有趣的是,我可以从所有浏览器(如 Firefox、chrome 等)下载它。
我的链接可能存在什么问题?
注意:我总是通过从 wget 或浏览器获取 json 文件来刷新 url。这是 referer json urlvideoapi.my.mail.ru/videos/mail/pasha.44444/video/_myvideo/397.json
答案1
您需要登录服务,会话信息可能保存在 cookie 中。使用 wget 时,您没有提供(或获取并使用)获取会话信息所需的 cookie。
类似于stackoverflow 上的回答可能会有帮助。
答案2
我想说的是,最后,尽管有 Access-Control-Allow-Origin 标头,我还是成功地从 wget 下载了它。
#!/bin/bash
link="http://api.video.mail.ru/videos/mail/carpath1a/_myvideo/289.json"
name="BlaBlaBla"
mr480=$(printf "%s\n" "tmpvar=\$(wget -qO- --save-cookies=cookies \"\$link\" | perl -ne 's:.*\"key\"\:\"(.*?)\".*\"(http.*?)\".*:\$1\t\$2: && print') ; linktemp=\$(echo \"\$tmpvar\"|grep 480p|awk '{print \$2}') ; wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 10 --continue -nv --show-progress --load-cookies=cookies \"\$linktemp\" -O \$name-480 ; while [[ \$? = 8 ]];do wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 10 --continue -nv --show-progress --load-cookies=cookies \"\$linktemp\" -O \$name-480 ;done")
eval "$mr480"
rm cookies
通过 while 循环重复 2-10 次后,它开始下载。我不明白为什么它会发送 503 或 403,但我知道这两种类型的错误会随代码一起返回,8
所以我使用了 while 循环。注意:不要使用&&
而不是,;
因为如果使用&&
它,它将不会运行 while 循环,因此它将失败并完成脚本。