web-dev-qa-db-ja.com

NodeJSでリクエストセッションを維持する方法

NodeJSによるログインが必要なWebサイトをスクレイピングするためにPOSTを使用しようとしています。ログインすると、GETで別のWebページにアクセスできます。

現在の最初の問題はログインです。ログイン情報にrequestを使用してPOSTを使用しようとしましたが、取得した応答がログインしていないようです。

exports.getstats = function (req, res) {
    request.post({url : requesturl, form: lform}, function(err, response, body) {
        res.writeHeader(200, {"Content-Type": "text/html"});
        res.write(body);
        res.end();
    });
};

ここでは、戻ってきたページを転送していますが、戻ってきたページにはまだログインフォームが表示されており、別のページにアクセスしようとすると、ログインしていませんと表示されます。

クライアント側のセッションとCookieデータを維持する必要があると思いますが、その方法を理解するのに役立つリソースが見つかりません。


フォローアップとして、私は zombiejs を使用して、必要な機能を取得しました

34
Ryan

Cookie jarを作成し、関連するすべてのリクエストに同じjarを使用する必要があります。

 var cookieJar = request.jar();
 request.post({url : requesturl, jar: cookieJar, form: lform}, ...

理論的には、ログインユーザーとしてGETを使用してページをスクレイピングできるはずですが、実際のログインコードが機能するのは一度だけです。ログインPOSTへの応答の説明に基づくと、実際にはまだ正しく機能していない可能性があるため、ログインコードの問題を最初に修正するまでcookie jarは役に立ちません。

43
Peter Lyons

request.jar();は私には機能しませんでした。そのため、ヘッダーレスポンスを使用して、次のような別のリクエストを作成しています。

request.post({
    url: 'https://exampleurl.com/login',
    form: {"login":"xxxx", "password":"xxxx"}
}, function(error, response, body){

    request.get({
        url:"https://exampleurl.com/logged",
        header: response.headers
    },function(error, response, body){
        // The full html of the authenticated page
        console.log(body);
    });
});

実際、この方法はうまく機能しています。 = D

12
Henrique Rotava