find('[for=spamProtectionDisableResult]')->text(); echo "Challenge is: $challenge\n"; if (preg_match('/(\d+) (plus|mínus) (\d+)/', $challenge, $m)) { $a = +$m[1]; $op = $m[2] == 'plus' ? 1 : -1; $b = +$m[3]; $r = $a + $op * $b; echo "Result: $r\n"; return $r; } else { throw new Exception("Unexpected challenge: $challenge"); } } function login() { echo "----- attempting to login -----\n"; return post( "https://vesmir.cz/usrlogon.do", [ "username" => VESMIR_LOGIN, "password" => VESMIR_PASSWORD, "docId" => 9573, "doShowdocAction" => "/usrlogon.do", "emailLogon" => false, "origDocId" => 9573, ]); } function disableAntispam() { echo "----- disabling antispam -----\n"; $r = get("https://vesmir.cz/components/form/spamprotectiondisable.jsp?backurl=%2Fcz%2Fuzivatel.html"); $doc = new Html($r->content); $solved = solveChallenge($doc); $result = post( "https://vesmir.cz/components/form/spamprotectiondisable.jsp", [ "result" => $solved, "__token" => $doc->find('[name=__token]')->value, "backurl" => "/cz/uzivatel.html", "hash" => $doc->find('[name=hash]')->value, ]); if (preg_match("/Zadaný výsledek je správný/", $result->content)) { echo "Anti-spam succeeded.\n"; return $result; } else { print_r($result); throw new Exception("Failed to disable antispam."); } } function dump_cookie_file_for_wget() { // echo "Exporting cookie for WGET\n"; // $c = file_get_contents("cookie.txt"); // $c = str_replace('#HttpOnly_', '', $c); // file_put_contents('cookie-wget.txt', $c); } function ensure_logged_in() { // get a session cookie $r = get("https://vesmir.cz/cz/uzivatel.html"); if (strpos($r->content, '/logoff.do?forward=/cz/') !== false) { echo "Already logged in!\n"; dump_cookie_file_for_wget(); return true; } else { echo "Need login!\n"; disableAntispam(); get("https://vesmir.cz/cz/uzivatel.html"); $result = login(); if (strpos($r->content, '/logoff.do?forward=/cz/') !== false) { echo "Logged in!\n"; dump_cookie_file_for_wget(); return true; } else { print_r($result); throw new Exception("--- LOGIN FAILED! ---"); } } }