PHP — отправка POST запросов с помощью CURL
Имеется форма на сайте, при сабмите которой POST запросы должны отправляться на сторонний сайт, и у себя мы должны выводить полученные со стороннего сайта результаты.
1. Ну сама наша форма:
echo '<form action="" method="post">'; echo 'Фамилия'; echo '<input type="text" name="lastName" size="10" value="'.$_POST['lastName'].'" />'; echo 'Имя'; echo '<input type="text" name="firstName" size="10" value="'.$_POST['firstName'].'" />'; echo '<input type="submit" name="searchButton" value="Поиск" />'; echo '</form>';
value для text-inputов добавлены для того чтобы после самбита формы указанные данные оставались введенными, можно и без этого
2. Если форма была отправлена:
if (!empty($_POST)) { $curl = curl_init(); //инициализация сеанса curl_setopt($curl, CURLOPT_URL, 'http://example.com/'); //урл сайта к которому обращаемся curl_setopt($curl, CURLOPT_HEADER, 1); //выводим заголовки curl_setopt($curl, CURLOPT_POST, 1); //передача данных методом POST curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //теперь curl вернет нам ответ, а не выведет curl_setopt($curl, CURLOPT_POSTFIELDS, //тут переменные которые будут переданы методом POST array ( 'lastName'=>$_POST['lastName'], 'firstName'=>$_POST['firstName'], 'searchButton'=>'get' //это на случай если на сайте, к которому обращаемся проверяется была ли нажата кнопка submit, а не была ли оправлена форма )); curl_setopt($curl, CURLOPT_USERAGENT, 'MSIE 5'); //эта строчка как-бы говорит: "я не скрипт, я IE5" :) curl_setopt ($curl, CURLOPT_REFERER, "http://ya.ru"); //а вдруг там проверяют наличие рефера $res = curl_exec($curl); //если ошибка то печатаем номер и сообщение if(!$res) { $error = curl_error($curl).'('.curl_errno($curl).')'; echo $error; } else { //если результат содержит то что нам надо (проверяем регуляркой), а в данном случае это табличка с классом yaResultat, то выводим ее. if (preg_match("/\<table class\='yaResultat'(.+)\<\/table\>/isU", $res, $found)) { $content = $found[0]; echo $content; //перед этим его конечно можно обработать всякими str_replace и т.д. } else { echo "<p>Неизвестная ошибка</p>"; //а если табличики с результатами нет, то печатать нечего и мы незнаем что делать :( } } curl_close($curl); }
Хорошие ссылки:
http://www.web-junior.net/otpravka-post-zaprosov-s-pomoshhyu-php-otpravka-fajjlov/
http://www.web-junior.net/otpravka-post-zaprosov-s-pomoshhyu-php-chast-2/
http://www.sql.ru/forum/actualthread.aspx?tid=750546
А как таким способом сделать выбор в поле SELECT???
Спасибо за рабочий пример! Удобно не только для спама, но и когда не хочется использовать iframe. Осталось понять как разобрать полученные данные, например, у меня просто таблица (из вашего скрипта убрал class, это понятно), но не все данные из ячеек нужны.
А у меня не работает, пишет «Неизвестная ошибка»
Клас то что нужно, сколько юзал нет все примеры какието муторные а здесь как для школьника!
Круто! давно искал!
Спасибо огромное!
а если информации в пост запросе много, и скрипт отправляет только половину, как тогда быть?
Спасибки