Почему нельзя получить URL перенаправления с помощью curl для указанного URL? - PullRequest
0 голосов
/ 25 апреля 2019

Откройте 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

Почему вышеприведенная команда не может получить последний перенаправленный URL http://quotes.money.163.com/stock?

1 Ответ

0 голосов
/ 25 апреля 2019

, потому что это перенаправление мета-тега HTML , и 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-перенаправлений. если вы хотите что-то, что понимает оба из них, подумайте об использовании безголового браузера.

...