'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コードを吐き出します。
どうすればいいですか?