Я пытаюсь написать скрипт PHP для входа на сайт Flask. Он использует curl для отправки формы входа, сохранения маркера входа в файле cookie, а затем позволяет веб-серверу загружать информацию с защищенного сайта. Однако, похоже, существует проблема, когда требуемый специальный символ в пароле не передается должным образом. Если удалить специальный символ, вызов будет успешным, но он вернет ошибку неверного пароля. Если я добавлю специальный символ, я получу ошибку 405 от сервера Flask. Я пытался кодировать пароль base64, кодировать его urlen-код, вручную помещать escape-символы в строку пароля, но безуспешно. Есть ли какой-то конкретный механизм, который мне нужно использовать для обеспечения правильной доставки пароля? Любая помощь будет принята с благодарностью. У меня заканчиваются идеи.
<?
//username and password of account
$username = "[email protected]";
$password = "n6EsBbz.AARyK7GEV";
//login form action url
$url="https://target-site.com/login/dashboard";
$postinfo = "username=".$username."&password=".$password."&state=&rememberMe=on";
$cookie_file_path = "cookie.txt";
$ch = curl_init();
// extra headers
$headers[] = "Accept: */*";
$headers[] = "Connection: Keep-Alive";
// basic curl options for all requests
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_USERAGENT,
"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
?>
Вы должны удалить CURLOPT_CUSTOMREQUEST
, «POST», который может вызвать проблемы при следовании перенаправлениям, так как код ответа в перенаправлении может сказать клиенту переключиться на другой метод для последующего запроса, пока CURLOPT_CUSTOMREQUEST
Строка затем переопределяет это.
Других решений пока нет …