web-dev-qa-db-ja.com

node.jsリクエストでリダイレクトに従います

私はnode.jsを学習しようとしています。サイトにログインするためのユーティリティに取り組んでいて、一部の情報を抽出しています。ドキュメントでリダイレクトが「自動的に機能する」ことを読みましたが、機能しません。

request({
    url: start_url,
    method: 'POST',
    jar: true,
    form: {
        action: 'login',
        usertype: '2',
        ssusername: '****',
        sspassword: '****',
        button: 'Logga in'
    }
}, function(error, response, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body, response.statusCode);
        request(response.headers['location'], function(error, response, html) {
            console.log(html);
        });
    }
});

最初に、respone.statusCode == 302を返すPOSTを実行します。本文は空です。リダイレクトされたページが本文に含まれることを期待していました。

次に、response.headers ['location']で「新しい」URLを見つけました。それを使用すると、本文には、期待していたページではなく、「ログインしていない」ページのみが含まれます。

誰もがこれについてどうやって行くのか知っていますか?

11
kaze

リダイレクトは[〜#〜] get [〜#〜]リクエストに対してのみデフォルトでオンになっています。 [〜#〜] post [〜#〜]のリダイレクトを追跡するには、以下を設定に追加します:

followAllRedirects: true

更新されたコード:

request({
    url: start_url,
    method: 'POST',
    followAllRedirects: true,
    jar: true,
    form: {
        action: 'login',
        usertype: '2',
        ssusername: '****',
        sspassword: '****',
        button: 'Logga in'
    }
}, function(error, response, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body, response.statusCode);
        request(response.headers['location'], function(error, response, html) {
            console.log(html);
        });
    }
});
28
Brandon Smith