- Автор темы
- #1
Начал изучать cURL и столкнулся с такой проблемой.
Здесь код обрезан, также оставил только, то что нужно для наглядности. Есть две фунции:
Первая парсит параметр А.
Вторая отправляет пост запрос с параметром А и Б.
Параметры А и Б меняются при каждой загрузке страницы.
(Также параметр Б вводиться вручную. После чего он отправляется вместе со спарсеным параметром А).
Как видим суть проблемы в том, что мы спарсили со страницы парметры А и Б, после чего $_GET['b'] стало не пустым и выполянеться фунция register2(), в которой заново проходит инициализация страницы и парметры А и Б меняют свои значения. но на вход мы получили старые значения и соответственно пост запрос не проходит.
Помогите плиз как можно исправить проблему
Здесь код обрезан, также оставил только, то что нужно для наглядности. Есть две фунции:
Первая парсит параметр А.
Вторая отправляет пост запрос с параметром А и Б.
Параметры А и Б меняются при каждой загрузке страницы.
(Также параметр Б вводиться вручную. После чего он отправляется вместе со спарсеным параметром А).
PHP:
function register1()
{
$ch = curl_init(); // Инициализируем сессию
curl_setopt($ch, CURLOPT_URL,"http://test.com"); // задаем адрес формы
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Результат нам нужно вернуть в переменную, а не на экран
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Переходить по редиректам
// Выполняем запрос
$result = curl_exec($ch);
echo $result;
preg_match('#<INPUT type="hidden" name="a_" id="a_" value="([0-9]{1,})#i',$result, $a);
echo "Получаем первый раз: $a[1]";
$result = curl_exec($ch);
curl_close ($ch); // Закрываем сессию
return $a; // Возвращаем добытый ключ
}
function register2($a, $b)
{
$post="http://test.com/register/?a=register&a_=".$a."&applyinvid=&b_=".$b.";
$url = "http://test.com/";
$ch = curl_init(); // Инициализируем сессию
curl_setopt($ch, CURLOPT_URL,$url); // задаем адрес обработчика формы
curl_setopt($ch, CURLOPT_POST, 1); // Указываем, что нам нужно отправить POST-запрос
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Передаем POST-параметры
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Результат нам нужно вернуть в переменную, а не на экран
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Переходить по редиректам
$result = curl_exec($ch);
preg_match('#<INPUT type="hidden" name="a_" id="a_" value="([0-9]{1,})#i',$result, $a);
echo "Получаем второй раз: $a[1]";
curl_close ($ch); // Закрываем сессию
return true;
}
if(!empty($_GET['b']))
{
//Как только получили с рег1 параметр "а" и ввели "b" запускаем рег2, где снова инициализируется сессия, в которой эти два параметра уже поменялись. !Соответственно отправляется пост запрос с данными из прошлой загрузки страницы.
register2($_GET['a'], $_GET['b']));
}
else
{
// Если параметр "b" не введен, инициалицизуем рег1, достаем оттуда "а" и вводим "b"
$a = register1();
$form = 'Введите параметр "b"
<form method="get">
<input type="hidden" name="a" value="'.$a.'">
<input type="text" name="b">
<input name="submit" type="submit" class="btn" value="зарегистрироваться"></form>';
echo $form;
}
Помогите плиз как можно исправить проблему