Отправка POST запроса
Существует некий сайт (Сайт_1) на котором есть форма заказа пропусков, для заказа пропуска нужно ввести ID и пароль, после чего появляется сама форма заказа.
Мне нужно добавить эту форму себе на сайт (уже сделано)
И далее, чтоб клиент мог заходить уже на мой сайт, заказывать пропуск через нас, но запрос соответственно отправлялся на Сайт_1, но при этом клиент не должен покидать нашу страницу.
Пусть например вылетает окошко "Пропуск успешно заказан" или что то в этом роде.
Схема следующая получается, клиент заполняет форму, после нажатия кнопки "заказать", данные отправляются на наш сервер, затем на их сервер, как то так...
Очень прошу помощи...я уже не знаю что делать..сделал так что пропуск заказывается но при этом перекидывает на их сайт...Помогите пожалуйста
Заранее Благодарен!
P.S. Но сначала надо отправить еще и cookie, с логином и паролем
Код:
<?php
$url = "http://сайт"; // URL на который посылаем запрос
$login = '12345'; // логин
$password = '12345'; // пассворд
$ch = curl_init();
$data = array(
'family_guests'=>'Иванов',
'name_guests'=>'Иван',
'father_name_guests'=>'Иванович',
'car_guests'=>'а000аа 199',
);
curl_setopt($ch, CURLOPT_URL,$url); // Устанавливаем URL на который посылать запрос
curl_setopt($ch, CURLOPT_HEADER, 1); // Результат будет содержать заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // Результат будет возвращём в переменную, а не выведен.
curl_setopt($ch, CURLOPT_NOBODY,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // Таймаут после 4 секунд
curl_setopt($ch, CURLOPT_POST, 1); // Устанавливаем метод POST
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=".$login."&passw=".$password); // посылаемые значения
curl_setopt($ch, CURLOPT_COOKIE, $cook);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
?>
$url = "http://сайт"; // URL на который посылаем запрос
$login = '12345'; // логин
$password = '12345'; // пассворд
$ch = curl_init();
$data = array(
'family_guests'=>'Иванов',
'name_guests'=>'Иван',
'father_name_guests'=>'Иванович',
'car_guests'=>'а000аа 199',
);
curl_setopt($ch, CURLOPT_URL,$url); // Устанавливаем URL на который посылать запрос
curl_setopt($ch, CURLOPT_HEADER, 1); // Результат будет содержать заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // Результат будет возвращём в переменную, а не выведен.
curl_setopt($ch, CURLOPT_NOBODY,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // Таймаут после 4 секунд
curl_setopt($ch, CURLOPT_POST, 1); // Устанавливаем метод POST
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=".$login."&passw=".$password); // посылаемые значения
curl_setopt($ch, CURLOPT_COOKIE, $cook);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
?>
Код:
<form action="send2.php" method="POST" name="addpassform" target="_blank">
<table class="whitetext" border="0">
<tbody>
<tr>
<td align="right">Фамилия:</td>
<td><input id="family_guests" type="text" name="family_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Имя:</td>
<td><input id="name_guests" type="text" name="name_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Отчество:</td>
<td><input id="father_name_guests" type="text" name="father_name_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Номер автомобиля:</td>
<td><input id="car_guests" type="text" name="car_guests" size="20" /></td>
</tr>
<tr>
<td colspan="2" align="center"><br /><input onclick="if ((document.getElementById('family_guests').value=='') || (document.getElementById('name_guests').value=='')) { alert('Не заполнены все необходимые поля! Повторите ввод!'); return false; } else addpassform.submit();" type="button" value="Заказать" /></td>
</tr>
</tbody>
</table>
</form>
<table class="whitetext" border="0">
<tbody>
<tr>
<td align="right">Фамилия:</td>
<td><input id="family_guests" type="text" name="family_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Имя:</td>
<td><input id="name_guests" type="text" name="name_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Отчество:</td>
<td><input id="father_name_guests" type="text" name="father_name_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Номер автомобиля:</td>
<td><input id="car_guests" type="text" name="car_guests" size="20" /></td>
</tr>
<tr>
<td colspan="2" align="center"><br /><input onclick="if ((document.getElementById('family_guests').value=='') || (document.getElementById('name_guests').value=='')) { alert('Не заполнены все необходимые поля! Повторите ввод!'); return false; } else addpassform.submit();" type="button" value="Заказать" /></td>
</tr>
</tbody>
</table>
</form>
Код:
<?php
//
$url = "www.сайт1.ру";
$referer = 'www.сайт2.ru';
$postLoginFields = array();
$postLoginFields['login'] = '11111';
$postLoginFields['pass'] = '11111';
$login = '11111'; // логин
$pass = '11111'; // пассворд
$ch = curl_init();
$data = array(
'family_guests'=>'Иванов',
'name_guests'=>'Иван',
'father_name_guests'=>'Иванович',
'car_guests'=>'а000аа 99',
);
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILonerror, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, $postLoginFields. "login=".$login."&pass=".$password. $data);
curl_setopt($ch, CURLOPT_COOKIE, $cook);
curl_close($ch);
header("Location: pass.html");
?>
//
$url = "www.сайт1.ру";
$referer = 'www.сайт2.ru';
$postLoginFields = array();
$postLoginFields['login'] = '11111';
$postLoginFields['pass'] = '11111';
$login = '11111'; // логин
$pass = '11111'; // пассворд
$ch = curl_init();
$data = array(
'family_guests'=>'Иванов',
'name_guests'=>'Иван',
'father_name_guests'=>'Иванович',
'car_guests'=>'а000аа 99',
);
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILonerror, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, $postLoginFields. "login=".$login."&pass=".$password. $data);
curl_setopt($ch, CURLOPT_COOKIE, $cook);
curl_close($ch);
header("Location: pass.html");
?>
Ну начало примерно правильно, только вместо echo $result; нужно разбирать ответ сервера и выдавать соответствующий ответ клиенту.
Цитата: mike
Ну начало примерно правильно, только вместо echo $result; нужно разбирать ответ сервера и выдавать соответствующий ответ клиенту.
Ну и как это сделать?
Как разобрать ответ от сервера?
Цитата: Besha07
Прописал вместо echo $result; это header("Location: pass.html");
Как разобрать ответ от сервера?
Как разобрать ответ от сервера?
Работа со строками: strpos, substr и т.п. Регулярные выражения. С HTML можно работать через функции DOM
Наймите на день программиста. У вас проблемы с азами.
Цитата: Besha07
Код:
<?php
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $postLoginFields. "login=".$login."&pass=".$password. $data);
...
?>
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $postLoginFields. "login=".$login."&pass=".$password. $data);
...
?>
У вас ошибка, как минимум, в строке указанной выше. Третий параметр функции должен быть либо массивом, либо строкой формата
"ключ1=значение1&ключ2=значение2&ключ3=значение3 ...". А вы пытаетесь смесь сделать из массива и строки. В вашем первом посте этой ошибки не было.
При этом в документации сказано, что если вы используете в качестве параметра массив, то заголовок Content-Type будет установлен в multipart/form-data.
:(((((((
Код:
<?php
//
$url = "www.сайт1.ру";
$referer = 'www.сайт2.ru';
// это лишнее. Логин и пароль передаются в массиве $data
//$postLoginFields = array();
//$postLoginFields['login'] = '11111';
//$postLoginFields['pass'] = '11111';
//$login = '11111'; // логин
//$pass = '11111'; // пассворд
$ch = curl_init();
$data = array(
'login'=>'1111111',
'pass'=>'2222222',
'family_guests'=>'Иванов',
'name_guests'=>'Иван',
'father_name_guests'=>'Иванович',
'car_guests'=>'а000аа 99',
);
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILonerror, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_COOKIE, $cook);
$result = curl_exec($ch); // Эту строчку нельзя опускать. Без нее работать не будет. Это вторая ваша ошибка.
// Переменная $result содержит ответ сервера "www.сайт1.ру" который нужно разбирать
curl_close($ch);
header("Location: pass.html"); // Это строка делает редирект на страницу pass.html, а по хорошему
//нужно сделать разбор ответа сервера, чтобы понять приняты
//данные для оформления пропуска или нет.
?>
//
$url = "www.сайт1.ру";
$referer = 'www.сайт2.ru';
// это лишнее. Логин и пароль передаются в массиве $data
//$postLoginFields = array();
//$postLoginFields['login'] = '11111';
//$postLoginFields['pass'] = '11111';
//$login = '11111'; // логин
//$pass = '11111'; // пассворд
$ch = curl_init();
$data = array(
'login'=>'1111111',
'pass'=>'2222222',
'family_guests'=>'Иванов',
'name_guests'=>'Иван',
'father_name_guests'=>'Иванович',
'car_guests'=>'а000аа 99',
);
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILonerror, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_COOKIE, $cook);
$result = curl_exec($ch); // Эту строчку нельзя опускать. Без нее работать не будет. Это вторая ваша ошибка.
// Переменная $result содержит ответ сервера "www.сайт1.ру" который нужно разбирать
curl_close($ch);
header("Location: pass.html"); // Это строка делает редирект на страницу pass.html, а по хорошему
//нужно сделать разбор ответа сервера, чтобы понять приняты
//данные для оформления пропуска или нет.
?>
Сделал, но не работает всё равно) пропуск не приходит..(
Может и HTML коде что то нужно сменить? Потому что форму я тупо скопировал с Сайта №1
Код:
<form action="send3.php" method="POST" name="addpassform">
<table class="whitetext" border="0">
<tbody>
<tr>
<td style="color: #ff1400;" align="right">* Фамилия:</td>
<td><input id="family_guests" type="text" name="family_guests" size="60" /></td>
</tr>
<tr>
<td style="color: #fc1b02;" align="right">* Имя:</td>
<td><input id="name_guests" type="text" name="name_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Отчество:</td>
<td><input id="father_name_guests" type="text" name="father_name_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Номер автомобиля:</td>
<td><input id="car_guests" type="text" name="car_guests" size="20" /></td>
</tr>
<tr>
<td class="justifyleft" colspan="2" align="center">
<p><input onclick="if ((document.getElementById('family_guests').value=='') || (document.getElementById('name_guests').value=='')) { alert('Не заполнены все необходимые поля! Повторите ввод!'); return false; } else addpassform.submit();" type="button" value="Заказать" /></p>
</td>
</tr>
</tbody>
</table>
</form>
<p style="color: #fd0b01;"> * Обязательно поле</p>
<table class="whitetext" border="0">
<tbody>
<tr>
<td style="color: #ff1400;" align="right">* Фамилия:</td>
<td><input id="family_guests" type="text" name="family_guests" size="60" /></td>
</tr>
<tr>
<td style="color: #fc1b02;" align="right">* Имя:</td>
<td><input id="name_guests" type="text" name="name_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Отчество:</td>
<td><input id="father_name_guests" type="text" name="father_name_guests" size="60" /></td>
</tr>
<tr>
<td align="right">Номер автомобиля:</td>
<td><input id="car_guests" type="text" name="car_guests" size="20" /></td>
</tr>
<tr>
<td class="justifyleft" colspan="2" align="center">
<p><input onclick="if ((document.getElementById('family_guests').value=='') || (document.getElementById('name_guests').value=='')) { alert('Не заполнены все необходимые поля! Повторите ввод!'); return false; } else addpassform.submit();" type="button" value="Заказать" /></p>
</td>
</tr>
</tbody>
</table>
</form>
<p style="color: #fd0b01;"> * Обязательно поле</p>
Буду очень Вам благодарен