Monday, 1 May 2017

Persist session for multiple requests

I wanna simule form filling and submission of this site.

Using postman, with cookie intercepter enabled, I got, However when I try do using nodejs code doesn't work.

My code snippet:

var http = require('https');
var fs = require('fs');
var agent = new http.Agent({ keepAlive: true });
const readline = require('readline');
var headers = {
    'Content-type': 'application/x-www-form-urlencoded'
};
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
var options = {
  host: 'satsp.fazenda.sp.gov.br',
  port: 443,
  path: '/COMSAT/Public/ConsultaPublica/ConsultaPublicaCfe.aspx',
  method: 'POST',
  timeout: 10000,
  headers: headers,
};

var get = {
  host: 'satsp.fazenda.sp.gov.br',
  port: 443,
  path: '/COMSAT/Public/ConsultaPublica/ConsultaPublicaCfe.aspx',
  method: 'GET',
  timeout: 10000,
}

var config={
  'ctl00$conteudo$txtChaveAcesso':'3517 0375 3153 3301 3430 5900 0152 7490 1717 6387 3777',
  'ctl00$conteudo$txtCaptcha':'h6fv',
  'ctl00$conteudo$btnConsultar':'Consultar',
  '__VIEWSTATE': '/wEPDwUJNDE0OTc1ODQ4D2QWAmYPZBYCAgQPZBYCAg8PZBYCAgEPFgIeBFRleHQFASBkZPtv9K3Q3UcvtPTWfgRECeVif2M4nvC8EjpYhKtxptOL',
  '__EVENTVALIDATION': '/wEdAAT5Kf7rwmxsjeDMuL8q4dbtJSVMEMivlZPFl0BDl6eW9XgMV8zsabdGGJd1OGYOdk3ThK6ND5vy6bqhutCx8kRHqfn4i3UBedJXgCTA/W4ZVFSy5CEMDrmS4N6vBVeab04=',
  '__VIEWSTATEGENERATOR': 'D0B6310E'
};

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var reques = http.request(get, (response) => {
  var text, results, error;
  var { statusCode } = response;
  options.headers['set-cookie']= response.headers['set-cookie'];
  console.log(response.headers['set-cookie']);
  if (statusCode !== 200) {
    error = new Error(`Request Failed.\n` +
      `Status Code: ${statusCode}`);
    }
    if (error) {
      console.error(error.message);
      res.resume();
      return;
    }
    console.log('Response from SEFAZ:');
    console.log(`STATUS: ${response.statusCode}`);
    console.log(`HEADERS: ${JSON.stringify(response.headers)}`);
    response.setEncoding('utf8');
    response.on('data', (chunk) => {
    //console.log(chunk);
    rl.question('Captcha: ', (answer) => {
    rl.close();
    var reques2 = http.request(options, (response2) => {
      console.log('Response2 from SEFAZ:');
      console.log(`STATUS: ${response2.statusCode}`);
      console.log(`HEADERS: ${JSON.stringify(response2.headers)}`);
      response2.setEncoding('utf8');
      response2.on('data', (chunk) => {
      //console.log(chunk);
    });
  });
  reques2.write("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; "
  + "name=\"ctl00$conteudo$txtChaveAcesso\"\r\n\r\n3517 0375 3153 3301 3430 5900 0152 7490 1717 6387 3777\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; "
  + "name=\"ctl00$conteudo$txtCaptcha\"\r\n\r\n" + answer + "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; "
  + "name=\"ctl00$conteudo$btnConsultar\"\r\n\r\nConsultar\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"__VIEWSTATE\"\r\n\r\n/wEPDwUJNDE0OTc1ODQ4D2QWAmYPZBYCAgQPZBYCAg8PZBYCAgEPFgIeBFRleHQFASBkZPtv9K3Q3UcvtPTWfgRECeVif2M4nvC8EjpYhKtxptOL\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\n"
  + "Content-Disposition: form-data; name=\"__EVENTVALIDATION\"\r\n\r\n/wEdAAT5Kf7rwmxsjeDMuL8q4dbtJSVMEMivlZPFl0BDl6eW9XgMV8zsabdGGJd1OGYOdk3ThK6ND5vy6bqhutCx8kRHqfn4i3UBedJXgCTA/W4ZVFSy5CEMDrmS4N6vBVeab04=\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"__VIEWSTATEGENERATOR\"\r\n\r\nD0B6310E\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--");
  reques2.end();
  });
});
});

  reques.end();

Basically, I do first request to get session cookies and captcha. After that I copy property "set-cookie" from response and send a POST, with form-data. But the response come back without cookies and It doesn't work. Someone knows what's going on?



via Rodolfo Oliveira

No comments:

Post a Comment