Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отправка POST запроса

85K
15 октября 2012 года
Besha07
6 / / 15.10.2012
Доброго времени суток!
Существует некий сайт (Сайт_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);  
?>
PHP - файл send2.php


Код:
<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>
Сама форма
85K
17 октября 2012 года
Besha07
6 / / 15.10.2012
Код:
<?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");
?>
Обновил еще...всё то что мне нужно как раз, но заявка о пропуске на охрану не приходит...
4
15 октября 2012 года
mike
3.7K / / 01.10.2002
Ну начало примерно правильно, только вместо echo $result; нужно разбирать ответ сервера и выдавать соответствующий ответ клиенту.
85K
16 октября 2012 года
Besha07
6 / / 15.10.2012
Цитата: mike
Ну начало примерно правильно, только вместо echo $result; нужно разбирать ответ сервера и выдавать соответствующий ответ клиенту.


Ну и как это сделать?

85K
16 октября 2012 года
Besha07
6 / / 15.10.2012
Прописал вместо echo $result; это header("Location: pass.html");
Как разобрать ответ от сервера?
4
16 октября 2012 года
mike
3.7K / / 01.10.2002
Цитата: Besha07
Прописал вместо echo $result; это header("Location: pass.html");
Как разобрать ответ от сервера?

Работа со строками: strpos, substr и т.п. Регулярные выражения. С HTML можно работать через функции DOM

84K
16 октября 2012 года
Mahi
11 / / 11.10.2012
Если представленный вами в первом посте код работает верно, то после его выполнения в переменной $result будет находиться ответ сервера, на котором реально происходит заказ пропуска. Ответ представляет из себя строку в которой содержится html документ. В этой строке вам нужно отыскать признаки положительного или отрицательного результата заказа пропуска.

Наймите на день программиста. У вас проблемы с азами.
84K
18 октября 2012 года
Mahi
11 / / 11.10.2012
Цитата: Besha07
 
Код:
<?php
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $postLoginFields. "login=".$login."&pass=".$password. $data);
...
?>
Обновил еще...всё то что мне нужно как раз, но заявка о пропуске на охрану не приходит...



У вас ошибка, как минимум, в строке указанной выше. Третий параметр функции должен быть либо массивом, либо строкой формата
"ключ1=значение1&ключ2=значение2&ключ3=значение3 ...". А вы пытаетесь смесь сделать из массива и строки. В вашем первом посте этой ошибки не было.
При этом в документации сказано, что если вы используете в качестве параметра массив, то заголовок Content-Type будет установлен в multipart/form-data.

85K
18 октября 2012 года
Besha07
6 / / 15.10.2012
И куда мне засунуть теперь $data ?
:(((((((
84K
18 октября 2012 года
Mahi
11 / / 11.10.2012
Должно быть примерно так. Особо не всматривался, поправил только те ошибки, которые лежат на поверхности.


Код:
<?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, а по хорошему
                         //нужно сделать разбор ответа сервера, чтобы понять приняты
                         //данные для оформления пропуска или нет.
?>
85K
19 октября 2012 года
Besha07
6 / / 15.10.2012
Огромное спасибо за ответ!!!
Сделал, но не работает всё равно) пропуск не приходит..(
Может и 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>
P.S. Если не сложно, помогите разобрать ответ от сервера)
Буду очень Вам благодарен
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог