Yritän tehdä c++-ohjelmaa, joka hakee HTML-datan Travian selainpelistä ja tekee sen perusteella "analyysejä" jotka helpottavat pelissä. En ole aikaisemmin koodaillut sockettien kanssa, mutta kun on perus selainpelistä kyse niin kuvittelin yhteyden serveriin onnistuvan helposti pelkillä GET-kyselyillä.
Latasin wiresharkin ja otin talteen Chromen GET kyselyn ja lähetin täysin saman HTTP-viestin omasta ohjelmastani, mutta palautus ilmoittaa että javascriptia ei tueta. Tutkin vähän HTML-merkkausta ja huomasin siellä olevan yksi JavaScript-tiedoston lisäys, joka ilmeisemmin kirjaa käyttäjän sisään ja muokkaa näkyvää HTML:ää. Selain näyttää siis normaalin peli-sivun, mutta tuo kyselyn kautta tuleva HTML on kirjaudu-sisään -sivu.
Tuo JavaScript-tiedosto on melkoista siansaksaa, joten siitä ei oikeen ota koodia katsomalla mitään selvää. Voisiko tuon JavaScriptin jotenkin helposti suorittaa, että saisin oikean pelidatan haettua sieltä palvelimelta?
Käytin täällä olevaa socket-luokkaa (tuskin on kyllä väliä).
Kyseinen javascript -tiedosto on lähinnä vaan "minifioitu", eli siitä on poistettu rivivaihdot, sisennykset, yms. suorittamisen kannalta tarpeeton. Ihan perus javascript beautifierin läpi ajamalla saat siitä paljon selkeämmän. Sinänsähän minifiointi on tässäkin tapauksessa ihan perusteltua. 310 kiloa muuttuu beautifierissa 507 kiloksi.
Sinänsähän tuo peli on mitä ilmeisimmin pääasiassa javascriptilla toimiva, eli olennaiset tiedot liikkuu ajax-pyyntöinä, jotka myöskin olisit nähnyt wiresharkissa. Sinänsä tuo itse sivun lataus tuskin sisältää mitään kovin kiinnostavaa.
Toki javascriptin voit ajaa helposti, esimerkiksi millä tahansa www-selaimella. Toki myös erillisiä JS-runtimeja löytyy, mutta selaimen objekteja käyttävä skripti tuskin juurikaan toimii niissä.
Mielestäni ylipäätään helpoin tapa päästä ko. tietoihin käsiksi voisi olla tehdä selainlaajennos. Selainlaajennoksia voi tehdä ihan javascriptiä kirjoittamalla ja esim. Chromella niiden tekeminen on todella helppoa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.