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