为什么不能为指定的 url 使用 curl 获得重定向 url?
Why can't get redirect url with curl for the specified url?
在浏览器中打开 url http://quotes.money.163.com/f10/gszl_600024.html
并等待 5 秒左右,url 将重定向到 http://quotes.money.163.com/stock
。
在一些关于 curl 命令的教程中,L
指令告诉 cURL 遵循重定向,s
指令告诉 cURL 保持静默,url_effective
变量就是我们想要的后。
target="http://quotes.money.163.com/f10/gszl_600024.html"
curl -Ls -w %{url_effective} -o /dev/null $target
为什么上面的命令获取不到最后一次重定向urlhttp://quotes.money.163.com/stock
?
因为它是 HTML meta tag redirect,并且 curl 不支持自动跟随 HTML 元标记重定向。接下来,您需要理解 HTML 的东西,而 curl 不需要。
quotes.money.163.com/f10/gszl_600024.html
包含 html 标签 <meta http-equiv="refresh" content="5; url=/">
告诉浏览器 after 5 seconds, redirect to the root of this domain
哪个是 quotes.money.163.com/
,然后 quotes.money.163.com/
依次加载 javascript 来自 http://img1.cache.netease.com/f2e/finance/backend_project/quotes_index_2014/app/dist/js/quotes_hub.916069.min.js
其中包含
! function(o) {
var l = location.href,
t = !!location.hash.split("#")[1] ? location.hash.split("#")[1] : "HS",
c = location.host,
n = location.protocol,
i = {
HS: "stock",
US: "usstock",
HK: "hkstock",
BOND: "bond",
FX: "old/#FX",
FN: "old/#FN",
FU: "old/#FU",
GB: "old/#GB",
DC: "old/#DC"
},
e = i[t],
a = n + "//" + c + "/stock";
function s() {
return l.indexOf("quotes.money.163.com/old/") > -1 ? 1 : 0
}
function r(o) {
return o.indexOf("query") > -1 ? 1 : 0
}
if (!s()) {
if (e) {
location.replace(n + "//" + c + "/" + e)
} else {
if (r(t)) {
location.replace(n + "//" + c + "/old/#" + t)
} else {
location.replace(a)
}
}
}
}(this);
通过修改 window.location 将 javascript 重定向到 http://quotes.money.163.com/stock
,更糟糕的是,curl 既不理解 javascript 重定向也不理解 html 重定向.如果您想要同时理解这两者的东西,请考虑使用无头浏览器。
在浏览器中打开 url http://quotes.money.163.com/f10/gszl_600024.html
并等待 5 秒左右,url 将重定向到 http://quotes.money.163.com/stock
。
在一些关于 curl 命令的教程中,L
指令告诉 cURL 遵循重定向,s
指令告诉 cURL 保持静默,url_effective
变量就是我们想要的后。
target="http://quotes.money.163.com/f10/gszl_600024.html"
curl -Ls -w %{url_effective} -o /dev/null $target
为什么上面的命令获取不到最后一次重定向urlhttp://quotes.money.163.com/stock
?
因为它是 HTML meta tag redirect,并且 curl 不支持自动跟随 HTML 元标记重定向。接下来,您需要理解 HTML 的东西,而 curl 不需要。
quotes.money.163.com/f10/gszl_600024.html
包含 html 标签 <meta http-equiv="refresh" content="5; url=/">
告诉浏览器 after 5 seconds, redirect to the root of this domain
哪个是 quotes.money.163.com/
,然后 quotes.money.163.com/
依次加载 javascript 来自 http://img1.cache.netease.com/f2e/finance/backend_project/quotes_index_2014/app/dist/js/quotes_hub.916069.min.js
其中包含
! function(o) {
var l = location.href,
t = !!location.hash.split("#")[1] ? location.hash.split("#")[1] : "HS",
c = location.host,
n = location.protocol,
i = {
HS: "stock",
US: "usstock",
HK: "hkstock",
BOND: "bond",
FX: "old/#FX",
FN: "old/#FN",
FU: "old/#FU",
GB: "old/#GB",
DC: "old/#DC"
},
e = i[t],
a = n + "//" + c + "/stock";
function s() {
return l.indexOf("quotes.money.163.com/old/") > -1 ? 1 : 0
}
function r(o) {
return o.indexOf("query") > -1 ? 1 : 0
}
if (!s()) {
if (e) {
location.replace(n + "//" + c + "/" + e)
} else {
if (r(t)) {
location.replace(n + "//" + c + "/old/#" + t)
} else {
location.replace(a)
}
}
}
}(this);
通过修改 window.location 将 javascript 重定向到 http://quotes.money.163.com/stock
,更糟糕的是,curl 既不理解 javascript 重定向也不理解 html 重定向.如果您想要同时理解这两者的东西,请考虑使用无头浏览器。