Can't convert a code number to a different format in order for it to use within params

Question:

When I navigate to this site, input chassis number JTDJC123705048557 right next to Numéro de chassis and hit Consultation button, I get the required result which is displayed at the bottom of that page.

I’m trying to create a script using requests module to mimic the process I’ve detailed above. The script I’ve already created can produce the result accordingly only when I hardcode the value of PAGEDATA.

The value of PAGEDATA is the chassis number (decoded or something). The thing is when I use this chassis number JTDJC123705048557 in the inputbox, the value of PAGEDATA within params becomes 5243313432206F6E20436C69636B7E5243313236207E5243313330207E5243313334204A54444A433132333730353034383535377E in dev tools.

This is how I got success (using hardcoded value of pagedata from dev tools):

import re
import requests

link = 'https://www.mobilit.fgov.be/WebdivPub_FR/wmvpstv1_fr.jsp'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}
params = {
    'SUBSESSIONID': '',
    'DYNAMIC': 'DOREQUEST',
    'NAME': 'CMV_WD_PBL01_CONSULT_STATUS',
    'PSTEPID': '',
    'WINDOWID': '',
    'PAGEDATA': '5243313432206F6E20436C69636B7E5243313236207E5243313330207E5243313334204A54444A433132333730353034383535377E'
}
with requests.Session() as s:
    s.headers.update(headers)
    res = s.get(link)
    session_id = res.url.split("=")[1]
    params['SUBSESSIONID'] = session_id
    params['PSTEPID'] = re.findall(r"pStepId=(.*?);",res.text)[0]
    params['WINDOWID'] = re.findall(r"windowId=(.*?);",res.text)[0]
    resp = s.get(link,params=params)
    print(resp.text)

Question: how can I convert this chassis number JTDJC123705048557 to the value of aforementioned pagedata?

Asked By: MITHU

||

Answers:

First to note: the code found on the page is one of the worst I’ve ever seen before (lot’s of global variables, unnecessary calls, generally hand-written spaghetti code).

For the task of computing PAGEDATA I use js2py module with snippet I got from the page Javascript (for pure Python version scroll down):

import js2py


js_hexify = """
var hexTable= new Array("00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F","10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F","20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F","30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F","40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F","50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F","60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F","70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F","80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F","90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF","D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF","E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF","F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF");
var mB = false;

function hexify(p) {
  var h = new Array(p.length<<1);
  var c = ' ';
  var b = 0;

  for (i = 0; i < p.length; i++) {
    c = p.charCodeAt(i);
  
    if ( c > 255 ) {
       if ( !mB ) {
          h.push('u');
          mB = true;
       }
       b = c >> 8;
   //    hexStr.push(DecToHex(hiByte));
         h.push(hexTable[b]);
       c = c & 255;
   //    hexStr.push(DecToHex(ch));
         h.push(hexTable[c]);
    } else {
      if ( mB ) {
        h.push('u');
        mB = false;
      }
    //    hexStr.push(DecToHex(ch));
          h.push(hexTable[c]);
    }
  }
  return h.join("")
}"""

context = js2py.EvalJs()
context.execute(js_hexify)

magic_string = "RC142 on Click~RC126 ~RC130 ~RC134 {}~"  # <-- this string is always the same, only the last part changes
id_ = "JTDJC123705048557"

print(context.hexify(magic_string.format(id_)))  # <-- this computes the PAGEDATA parameter

Prints:

5243313432206F6E20436C69636B7E5243313236207E5243313330207E5243313334204A54444A433132333730353034383535377E

Pure Python version:

magic_string = "RC142 on Click~RC126 ~RC130 ~RC134 {}~"
id_ = "JTDJC123705048557"

x = "".join((hex(ord(ch))[2:].upper() for ch in magic_string.format(id_)))

print(x)
Answered By: Andrej Kesely