PHP cURL - POST отправляется на пустую страницу? - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь автоматизировать использование этого сайта , где пользователи могут использовать временные адреса электронной почты, которые они также могут указать вручную. Он использует очень простую защиту от спама, имея этот <input name="csrf" type="hidden"> ввод в форме со случайным набором символов, который затем должен быть включен в запрос POST. Итак, если CSRF bj152nvua2ob, и я хочу, чтобы мой новый адрес был «john@l0real.net», мой POST должен быть:

csrf=bj152nvua2ob&mail=john&domain=@l0real.net

Проблема в том, что я не могу сделать это с помощью cURL и PHP. Вот вершина моего кода:

$ch = curl_init ();

curl_setopt ($ch, CURLOPT_URL, "temp-mail.org/en/option/change/");
// Without CURLOPT_FOLLOWLOCATION, the page is not going to load.
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

$html = curl_exec ($ch);

Затем, после получения ответа, я начинаю генерировать новый почтовый адрес и начинаю получать CSRF, поэтому я написал две простые функции, называемые «generate_mail» и «get_csrf» . Я протестировал оба из них, и они, кажется, работают без проблем.

$csrf = get_csrf ($html);
$mail = generate_mail ();
$post = "csrf=$csrf&mail=$mail&domain=@l0real.net";
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);

file_put_contents ("final_response.html", curl_exec ($ch));

curl_close ($ch);

После создания файла final_response.html на моем ПК и его просмотра, я заметил, что результаты не соответствуют ожиданиям. Несколько попыток позже, я решил отладить свое соединение с помощью Fiddler, и затем я заметил кое-что интересное. Вот что я получаю, когда использую этот сайт в своем браузере:
with my browser

и это с помощью cURL:
with cURL.

Обратите внимание, как 1 элемент (исключая туннели) против ... 4! Первый элемент является пустым ответом, но второй содержит HTML-страницу. Последние два одинаковы: третий - пустой ответ (и именно туда был отправлен мой POST), а четвертый содержит HTML-страницу с другим CSRF и неверным почтовым адресом (который был создан самим сайтом, а не мной). Из того, что я могу сказать, каждый раз, когда я использую curl_exec, он сначала загружает пустую страницу, но затем загружает правильную. Все мои запросы отправляются на пустую, поэтому позже игнорируются. Это мера безопасности, или я неправильно настроил cURL? Я пытался предоставить как можно больше информации, демонстрируя каждый и каждый мой шаг, надеясь, что эту проблему можно решить.

1 Ответ

0 голосов
/ 27 июня 2018

Решено добавлением этих строк кода:

curl_setopt ($ch, CURLOPT_POSTREDIR, 3);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $path_to_cookies);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $path_to_cookies);

Теперь все работает так, как задумано!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...