вы пытаетесь отправить учетные данные для входа до получения куки-файла, но веб-сайт требует, чтобы у вас уже был куки-файл ПРИОР для входа в систему. Кроме того, веб-сайт использует CSRF-токен , который необходимо получить довойти в систему, но вы не делаете.Кроме того, ваше имя пользователя и пароль должны быть urlencoded, но вы не urlencode это, например, @ неправильный, он должен был быть Username=pik123%40gmail.com
(@
urlencoded is %40
), также вызывается переменная usernameUserName
, а не Username
,
сначала извлеките страницу входа с помощью обычного запроса GET, и вы получите как нужный файл cookie, так и токен CSRF,
, а затем выполните анализтокен CSRF и отправьте запрос POST на страницу входа с cookie и токен CSRF в формате application/x-www-form-urlencoded
, с __RequestVerificationToken
в качестве токена CSRF и UserName
в качестве имени пользователя (и будьте более осторожны с CaPiTaLiZaTiOnздесь это UserName
, а не Username
), и Password
в качестве пароля, и, казалось бы, жестко закодированный параметр, называемый ReturnUrl
, который просто содержит /
(urlencoded ofc, который равен %2F
, например, ReturnUrl=%2F
), и вы должны войти в систему (сеанс cookie теперь будет входить в систему), при условии, что у вас есть действительные учетные данные. Пример
с библиотекой hhb_curl (которая заботится об обработке файлов cookie идворняжкаl проверка ошибок, преобразование ошибок скручивания в RuntimeExceptions):
<?php
declare (strict_types = 1);
require_once('hhb_.inc.php');
$username = "pik123@gmail.com";
$password = "Bf*****";
$hc = new hhb_curl('', true);
// get cookie and csrc token:
$html = $hc->exec('https://eksisozluk.com/giris')->getStdOut();
$domd = @DOMDocument::loadHTML($html);
$xp = new DOMXPath($domd);
// grab the login form (it contains the csrf token, among other things)
$login_form = $xp->query("//form[contains(@action,'/giris')]")->item(0);
$login_parameters = array();
foreach ($login_form->getElementsByTagName("input") as $input) {
$login_parameters[$input->getAttribute("name")] = $input->getAttribute("value");
}
// the CSRF token is called `__RequestVerificationToken`, and $login_parameters now contains roughly:
// array(
// '__RequestVerificationToken' => 'qTk2Ik0glfV8W1WckmrVkVXujQE8C1eTqMEe36SP-PPUXDn88GG0XYxif3ZMIVGZH08-MEbbtD7i7Q4ymxuasveDZL-WaHQH22r33fOdsqQ1',
// 'ReturnUrl' => '/',
// 'UserName' => '',
// 'Password' => '',
// 'RememberMe' => 'false',
// );
assert(isset($login_parameters['UserName']));
assert(isset($login_parameters['Password']));
$login_parameters['UserName'] = $username;
$login_parameters['Password'] = $password;
// log in
$html = $hc->setopt_array(array(
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => http_build_query($login_parameters)
))->exec()->getStdOut();
// check for login errors:
$domd = @DOMDocument::loadHTML($html);
$xp = new DOMXPath($domd);
$login_errors = array();
foreach ($xp->query("//*[contains(@class,'validation-error')]") as $login_error) {
$login_error = trim($login_error->textContent);
if (!empty($login_error)) {
$login_errors[] = $login_error;
}
}
unset($login_error);
if (!empty($login_errors)) {
throw new \RuntimeException("eksisozluk login errors: " . print_r($login_errors, true));
}
вывод:
$ php wtf4.php
PHP Fatal error: Uncaught RuntimeException: eksisozluk login errors: Array
(
[0] => captcha'yı yanlış girdiniz.
)
in /cygdrive/c/projects/misc/wtf4.php:46
Stack trace:
#0 {main}
thrown in /cygdrive/c/projects/misc/wtf4.php on line 46
- , поскольку
pik123@gmail.com
/ Bf*****
не является действительными учетными данными для входа в систему.