Главная > PHP > PHP – отправка POST запросов с помощью CURL

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

Categories: PHP Tags: ,
  1. bySteff
    Октябрь 2nd,2014 в 11:45 | #1

    А как таким способом сделать выбор в поле SELECT???

  2. Alex
    Август 20th,2014 в 15:31 | #2

    Спасибо за рабочий пример! Удобно не только для спама, но и когда не хочется использовать iframe. Осталось понять как разобрать полученные данные, например, у меня просто таблица (из вашего скрипта убрал class, это понятно), но не все данные из ячеек нужны.

  3. Кирилл
    Июнь 19th,2014 в 15:16 | #3

    А у меня не работает, пишет “Неизвестная ошибка”

  4. александр
    Июнь 17th,2013 в 20:13 | #4

    Клас то что нужно, сколько юзал нет все примеры какието муторные а здесь как для школьника!

  5. php
    Ноябрь 20th,2012 в 16:15 | #5

    Круто! давно искал!

  6. Ольга
    Сентябрь 18th,2012 в 12:42 | #6

    Спасибо огромное!

  7. Михпил
    Август 7th,2011 в 12:21 | #7

    а если информации в пост запросе много, и скрипт отправляет только половину, как тогда быть?

  8. Виктор
    Ноябрь 30th,2010 в 18:26 | #8

    Спасибки

Похожие публикации