Ultimamente sto provando a raschiare informazioni da un sito Web (kicktipp) utilizzando Nodejs, request module e cheerio. Poiché questo sito richiede un'autenticazione per visualizzare la maggior parte dei siti, ho provato ad accedere tramite una richiesta di posta e controllare se l'utente è connesso con il seguente codice (ho sostituito le credenziali con dati fittizi ma utilizzo i dati reali nel mio script effettivo):Nodejs scraping della pagina Web con cookie di autenticazione
var request = require('request');
var jar = request.jar();
var request = request.defaults({
jar: jar,
followAllRedirects: true
});
var jar = request.jar();
var cheerio = require('cheerio');
request.post({
url: 'http://www.kicktipp.de/info/profil/loginaction',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
method: 'post',
jar: jar,
body: '[email protected]&passwort=1234567890&_charset_=UTF-8&submitbutton=Anmelden'
}, function(err, res, body){
if(err) {
return console.error(err);
};
request.get({
url: 'http://www.kicktipp.de/',
method: 'get',
jar: jar
}, function(err, res, body) {
if(err) {
return console.error(err);
};
var $ = cheerio.load(body);
var text = $('.dropdownbox > li > a').text();
console.log(text);
var error = $('#kicktipp-content > div.messagebox.errors > p').text();
console.log(error);
var cookies = jar.getCookies('http://www.kicktipp.de/');
console.log(cookies);
});
});
i parametri da inviare dal html-form (ad ispezione con il browser) simile a questo:
[email protected]&passwort=1234567890&_charset_=UTF-8&submitbutton=Anmelden
con lo script, il mio cookie jar
assomiglia a questo:
[ Cookie="JSESSIONID=F650D7F5CD6AF4F6B0944B2190EE2D29.kt213; Path=/; hostOnly=true; aAge=1ms; cAge=179ms" ]
Il JSESSIONID
viene salvato correttamente ma il server non verrà registrato dal console.log(text)
stampe Login
ma dovrebbe stampare Logout
se l'utente ha eseguito l'accesso correttamente.
Dopo aver ispezionato la richiesta di accesso con il browser ho riconosciuto che il browser riceve un nuovo cookie ogni volta che una pagina su questo dominio è richiesto tramite set-cookie
nell'intestazione di risposta in questo modo:
Set-Cookie: login=bS5zcGxpZXRob2V2ZXJAZ21haWwuY29tOjE0NzU0MDA3MjAxMjA6Mzg1NTI4OGY3ODgzN2FkMzllNTA0NWNkY2ZjMjBjZGM; Domain=.kicktipp.de; Expires=Sun, 02-Oct-2016 09:32:00 GMT; Path=/; HttpOnly
Comunque non sono in grado (o semplicemente non so come) per ottenere questo cookie nel mio jar di richiesta e quindi visitare la pagina come utente registrato.
C'è qualcosa che mi manca qui per rimanere loggato (o accedere alla pagina)? Grazie in anticipo.