Привет. Пытаюсь залогиниться на форуме под управлением FluxBB. Но при выполнении кода получаю ошибку. Error 2: Нам кажется, что вы робот. Доступ запрещен. Подскажите, плиз, что не так с кодом, или хотя бы куда копать. PHP: $hostname = "site.net";$site = "/login.php"; // Устанавливаем соединение $fp = fsockopen($hostname, 80, $errno, $errstr, 30); // Проверяем успешность установки соединенияif (!$fp) {echo "$errstr ($errno)<br>\n";} else { $out = 'GET '.$site.' HTTP/1.1'."\r\n"; $out .= 'Host:'.$hostname."\r\n"; $out .= 'Connection: Close'."\r\n\r\n";fwrite($fp, $out);while (!feof($fp)) {$content .= fgets ($fp,128);}//echo $content;$pos = stripos ($content, "csrf_token");$token = substr ($content, $pos+19, 40);$pos_time = stripos ($content, "cr\" value=");$time = substr ($content, $pos_time+11, 10);//echo $token."<br>";//echo "<br>".$time;fclose ($fp);}$data = "form_sent=1&redirect_url=https://site.net/index.php&csrf_token=".urlencode($token)."&req_username=".urlencode($username)."&req_password=".urlencode($password)."&cr=".urlencode($time)."&login=".urlencode("Вход");sleep(1); // Устанавливаем соединение $fp = fsockopen($hostname, 80, $errno, $errstr, 30); // Проверяем успешность установки соединенияif (!$fp) {echo "$errstr ($errno)<br>\n";} else { $out = "POST /login.php?action=in HTTP/1.1\r\n"; $out .= "Host: site.net\r\n"; $out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)\r\n"; $out .= "Connection: keep-alive\r\n"; $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $out .= "Content-length: ".strlen($data)."\r\n"; $out .= "Connection: close\r\n\r\n"; $out .= $data."\r\n\r\n";fwrite($fp, $out);while (!feof($fp)) {$content_enter .= fgets ($fp,128);}echo $content_enter;fclose ($fp);}?>
Скидывай ссылку на рабочий форум. Ставить форум на локалхост влом. Ну и если там рекапча то без гемора не обойтись.
Нужно точно повторять хттп-запрос со всеми нормальными заголовками браузера. PHP: <?php$loginPageUrl = 'http://holywarsoo.net/login.php';$welcomePageUrl = 'http://holywarsoo.net/index.php';$authUrl = 'http://holywarsoo.net/login.php?action=in';$userAgent = 'Opera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.18';$username = 'deleteme';$password = 'mW7cTWpgtNG6';function httpGet($url, array $curlOptions = []){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); if (!empty($curlOptions)) { curl_setopt_array($ch, $curlOptions); } $result = curl_exec($ch); return $result;}function httpPost($url, $postdata = null, array $curlOptions = []){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_POST, true); if (!is_null($postdata)) { curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); } if (!empty($curlOptions)) { curl_setopt_array($ch, $curlOptions); } $result = curl_exec($ch); return $result;}$cookieFile = __DIR__ . '/cookies.txt';if (file_exists($cookieFile)) { unlink($cookieFile);}$curlOptions = [ CURLOPT_USERAGENT => $userAgent, CURLOPT_COOKIEFILE => $cookieFile, CURLOPT_COOKIEJAR => $cookieFile, //CURLOPT_VERBOSE => true, CURLOPT_HTTPHEADER => [ 'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', 'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8', //'Expect:', ],];$loginPageHtml = httpGet($loginPageUrl, $curlOptions);if (!preg_match('/csrf_token[^\<\>]+value\=\"([a-f0-9]{40})\"/', $loginPageHtml, $matches)) { throw new Exception('No csrf-token found');}$csrfToken = $matches[1];if (!preg_match('/cr[^\<\>]+value\=\"([0-9]+)\"/', $loginPageHtml, $matches)) { throw new Exception('No timestamp found');}$timestamp = $matches[1];echo "CSRF-token: $csrfToken\n";echo "Timestamp: $timestamp\n";$postdata = [ 'form_sent' => '1', 'redirect_url' => $welcomePageUrl, 'csrf_token' => $csrfToken, 'req_username' => 'deleteme', 'req_password' => $password, 'cr' => $timestamp, 'login' => 'Вход',];$welcomePageHtml = httpPost($authUrl, $postdata, $curlOptions + [CURLOPT_REFERER => $loginPageUrl]);file_put_contents(__DIR__ . '/auth.html', $welcomePageHtml);if (preg_match('/http-equiv="refresh"/', $welcomePageHtml)) { echo "Welcome\n";} else { echo "Something shitty happened\n";}?>