1

node.js を使用して 10 の異なる Web サイトからメッセージと通知を収集し、それらを自分のメール アカウント (日報のようなもの) に送信します。私は 5 つの異なる Web サイトでこの仕事をしましたが、現在 Amazon で問題が発生しています。

Amazon で行う必要があるのは、資格情報を使用してログインし、データを解析することです。

いくつかの実装とさまざまなアプローチの後、Cookie がサポートされていないため、Amazon がログインを拒否していることに最終的に気付きましたが、それは真実ではありません。

その証拠に、node.js を使用して Amazon ログイン ページを開き、応答を .html ファイルに保存しました。この保存された html ファイルを開くと、Amazon が Cookie を有効にするよう要求していることがわかります。スクリーンショットは次のとおりです。 アマゾンクッキー

これが私のnode.jsクリップです:

var request = require("request");
request = request.defaults({jar: true});//Send cookies on every subsequent requests. This is really important
var requestHeaders = new DRequestHeaders();
var cheerio = require('cheerio');
var fs = require('fs');
var user = new DUser('test','test');

//First open start site: http://amazon.com
request.get({headers:requestHeaders.getHeaders(), uri: user.getUrl('startSeite'), followRedirect: true, maxRedirects: 10,}, function(err, res, body) {
    if(err) {
        console.log('GET request failed here is error');
        console.log(res);
    }

    //Get login link
    $=cheerio.load(body);
    user.setNewUrl('login',$('#nav-link-yourAccount').attr('href'));
    console.log(user.getUrl('login'));
    //Go to the login link
    request.get({headers:requestHeaders.getHeaders(), uri: user.getUrl('login'), followRedirect: true, maxRedirects: 10,}, function(err, res, body) {
        if(err) {
            console.log('GET request failed here is error');
            console.log(res);
        }

        //Now we are at login page. We want to prepare for form submittion
        //Get hidden input fields
        $ = cheerio.load(body);
        var inputsFields = $('#ap_signin_form :input');//Get all inputs
        user.setNewUrl('form-submit',$('#ap_signin_form').attr('action'));
        var formSubmitData = {};
        inputsFields.each(function() {
            formSubmitData[this.attribs['name']]=this.attribs['value'];//Get attribute name and value
        });
        //Set username and password, and now everything is ready for form submission
        formSubmitData['email'] = user.getUsername();
        formSubmitData['password'] = user.getPassword();

        //This is just for demonstration. I save response from amazon so I can clearly see the message that cookies are not supported
        fs.writeFile("amazon.html", body, function(err) {
            if(err) {
                return console.log(err);
            }
            console.log("The file was saved!");
        });

    });
});

応答オブジェクトを出力し、元の要求を見つけると、node.js がいくつかの Cookie を送信したことがはっきりとわかりますが、なぜ Amazon はそれらを拒否しているのでしょうか?

      GET /ap/signin/278-4773600-2469922?_encoding=in HTTP/1.1\r\n
        Accept: text/html\r\n
        Accept-Language: en-US\r\n
        Cache-Control: max-age=0\r\n
        Connection: keep-alive\r\n
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36\r\n
        Cookie: x-wl-uid=1VIRmGEpmmFvZeJXhczJzp7Uv4qmAA6yIt40QrU9OMMLth6j0vSM0j7lKYDYo=; session-id-time=2082751l; session-id=944-4770-24922\r\n
        content-type: application/x-www-form-urlencoded\r\n
host: www.amazon.com
4

0 に答える 0