У вас есть две проблемы с вашим кодом:
1), как вы ориентируетесь на сайт с реальным куки браузера хранятся/обновляются, когда страницы получить и отправлены обратно на сервер при каждом последующем запросе. Вы не храните файлы cookie и не отправляете их.
2) token
, который вы передаете, зависит от каждого запроса. Это своего рода «секретный код» для проверки запроса.
Чтобы решить эту проблему, сначала у вас есть настройки завивки для управления файлами cookie. Файлы cookie будут храниться в небольшом текстовом файле по вашему выбору.
Тогда вы должны разделить задачу на два этапа:
первый шаг: загрузите страницу и разбора token
второй шаг: отправить запрос на почту, проходящую разобранного token
Это некоторые изменения вашего исходного кода. Вы также можете запустить его из командной строки.
Единственная нетривиальная часть - извлечение токена, но на самом деле это просто манипуляция с строкой.
<?php
// Load the page
$curl=curl_init();
curl_setopt($curl, CURLOPT_URL, "https://www.turkiye.gov.tr/btk-numara-tasima");
// curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_VERBOSE, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookies.txt'); // <-- read/write cookies into a text file
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookies.txt'); // <-- read/write cookies into a text file
$content = curl_exec($curl);
curl_close($curl);
// Parse output to extract token
$content = substr($content, strpos($content, '<input type="hidden" name="token" value="') + strlen('<input type="hidden" name="token" value="'));
$token = substr($content, 0, strpos($content, '"'));
$token = urlencode($token);
// This is the number to query
$number = '5441234567';
// Put together token and number
$data = 'txtMsisdn=' . $number . '&token=' . $token;
// Perform post request
$curl=curl_init();
curl_setopt($curl, CURLOPT_URL, "https://www.turkiye.gov.tr/btk-numara-tasima?submit");
//curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_VERBOSE, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookies.txt'); // <-- read/write cookies into a text file
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookies.txt'); // <-- read/write cookies into a text file
$content = curl_exec($curl);
curl_close($curl);
// Parse output
$content = substr($content, strpos($content, '<div class="reminderContainer">') + strlen('<div class="reminderContainer">'));
$result = substr($content, 0, strpos($content, '</div>'));
echo $result . "\n";
Возможно, вы используете 'curl_exec()' дважды? Измените 'if ($ curl_exec ($ curl) === false)' to 'if (empty ($ content))' и повторите попытку –
Не bro. Я попытался, ничего не изменилось. – bedesten1618
Вы определенно не хотите запускать 'curl_exec' дважды. Кажется, что код работает нормально, может быть, вы не пройдете проверку с вашим запросом, и сервер не делает то, что вы хотите, с помощью запроса POST? – quickshiftin