2017-01-31 8 views
0

'request'パッケージを調べて、オフィスで自動化されたタスクを実行します。ノードリクエストの使用 - チャレンジベースのWebページでの認証方法

要件は、サーバーに自動的にログインして(多くは多数あります)、Webページに移動してから情報を収集し、レポートを作成することです。

これらのサーバーは最初にユーザーアカウントを要求し、チャレンジレスポンスとして解決する別のサーバーにコピーして貼り付けるチャレンジ番号を生成します。このレスポンスは、スクリプトにログインさせたいWebページに貼り付けられます。

「リクエスト」でこれを行う方法を理解しようとしています。次のコードは、唯一の限り、ユーザー名を入力するページをループとして取得します。スニペットで

"use strict" 
var request = require('request'); 

var getJar = request.jar(); 
var opts = { 
    method: 'GET', 
    uri: 'https://serverIP/path/to/post/action', 
    agentOptions: { 
     rejectUnauthorized: false 
    }, 
    jar: getJar, 
    followAllRedirects: true 
}; 

var postJar = request.jar(); 
var postOpts = { 
    method: 'POST', 
    uri: 'https://serverIP/path/to/post/action', 
    form: { 
     userName: 'init' 
    }, 
    agentOptions: { 
     rejectUnauthorized: false 
    }, 
    postJar: postJar, 
    followAllRedirects: true, 
    headers: { 
     'Referer': 'value I see in dev console' 
    } 
}; 

request(opts, function (err, res, body) { 

    console.log('GET error is: ' + JSON.stringify(err)); 
    console.log('GET response is: ' + res); 
    console.log('GET body is: ' + body); 

    var cookie_string = getJar.getCookieString(opts.uri); 
    var cookies = getJar.getCookies(opts.uri); 
    console.log(JSON.stringify(cookies) + '\n' + cookie_string); 

    postOpts.postJar.setCookie(cookie_string, postOpts.uri); 

    request(postOpts, function (err, res, body) { 
     console.log('POST error is: ' + JSON.stringify(err)); 
     console.log('POST response is: ' + res); 
     console.log('POST body is: ' + body); 

    }); 
}); 

フォームパラメータは、私がネットワーク> POSTリクエスト> PARAMS下Firefoxのデベロッパーコンソールに表示のものです私が提出したときブラウザからユーザー名を入力します。

コードでは、ユーザー名が要求されたページに戻るだけです。それはそこにくっついてしまいます。私はPOST本体の値をコンソールに記録することでこれを知っています。チャレンジ文字列を表示するHTMLとチャレンジレスポンスを貼り付ける入力フィールドの代わりに、その値を要求するHTMLコードを吐き出します。

どうすればいいですか?

答えて

0

さらなる洞察のために 'request-debug'パッケージを使用しました。最初のGETリクエストがうまくいっています。cookie = sessionIdの値を取得し、それを私の最初のスニペットに示すようにPOSTメッセージのjarに挿入します。

デバッグをオンにすると、最後に「cookiesRequired」というURLへのリダイレクトを検出できました。リクエストはこのリダイレクトをたどり、2番目のGETを生成していました。無効なセッションをログインする必要があります。

それから、私は、クッキーセッションシステムが正しく動作していないことに気付きました。 2番目のGETから、ヘッダーをクッキーから取得したセッションIDで挿入したことがわかりました。の次の段階を解決するために、私は今促さ取得していますCookieヘッダーを挿入した後

postOpts.jar.setCookie(cookie_string, '/'); 

:このラインdoesntのも、これまでの行動に影響を与える

var cookie_string = getJar.getCookieString(opts.uri); 
console.log('ATTENTION--- The cookie from getJar is:\t' + cookie_string); 

postOpts.headers.cookie = cookie_string; 

:だから私はこのようpostJarにこのヘッダを注入されました認証。

関連する問題