Задать вопрос
Captain
@Captain

Отправка формы заполненной пользователем через curl, какое минимальное кол-во шагов?

Есть необходимость дать пользователю заполнить форму, далее отправить ее, но результаты нужно получить для дальнейшей обработки, редирект пользователя на URL, куда отправлена форма не нужен.
Есть ли более элегантный способ чем отправлять форму куда-то в пределах сайта, обрабатывать отправленные формой данные и уже далее вызывать curl и отправлять через него? Не хочется перемудрить.
  • Вопрос задан
  • 1153 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@MikeHail
Если на другой сайт передаётся через GET то используйте JSONP.
А так вот вам код, похожее уже делал. Ничего мудрёного.
<?php
if (!empty($_POST)) {
	$curl = curl_init(); //инициализация сеанса
	curl_setopt($curl, CURLOPT_URL, 'https://'); //урл сайта к которому обращаемся
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
	curl_setopt ($curl, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
	curl_setopt($curl, CURLOPT_HEADER, 0); //выводим заголовки
	curl_setopt($curl, CURLOPT_POST, 1); //передача данных методом POST
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //теперь curl вернет нам ответ, а не выведет
	curl_setopt($curl, CURLOPT_POSTFIELDS, //тут переменные которые будут переданы методом POST
		array (
			'a'=>@$_POST['a'],
			'b'=>@$_POST['b'],
			'c'=>@$_POST['c'],
			'd'=>@$_POST['d'],
				'searchButton'=>'get' //это на случай если на сайте, к которому обращаемся проверяется была ли нажата кнопка submit, а не была ли оправлена форма
				));
	curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0'); //эта строчка как-бы говорит: "я не скрипт, я огнелис" :)
	curl_setopt ($curl, CURLOPT_REFERER, "https://"); //а вдруг там проверяют наличие рефера
	$res = curl_exec($curl);
	//если ошибка то печатаем номер и сообщение
	if(!$res) {
		$error = curl_error($curl).'('.curl_errno($curl).')';
		echo $error;
	}
	else {
		header('Content-type: text/html');
		$search = array('"[', '\"'); //говнокод
		$replace = array('[', '"'); //говнокод
		$replacePairs = array_combine($search, $replace);
		echo strtr($res, $replacePairs);
		curl_close($curl);
	}
}
?>

$('#to').on('submit', function() {
				var e = $(this),
				caption = $('button', e).html(),
				loader = $('button', e).attr('data-loader');
				$('button', e).attr('disabled', 'disabled').html(loader);
				$(".tool_result", e).html('');
				$.ajax({
					type: "POST",
					url: "./2.php",
					dataType: 'json',
					data: e.serialize(),
					success: function(c) {
						$('button', e).removeAttr('disabled').html(caption);
						if(typeof c.err !== "undefined") {
							$(".tool_result", e).html('<div class="message error mini">' + c.err + '</div>')
						} else {
							var d = ['1', '2', '3', '4', "5"],
							res = '<table><thead><tr><th>' + d[0] + '</th><th>' + d[1] + '</th><th>' + d[2] + '</th><th>' + d[3] + '</th>';
							if(c[0][5] != "") res += '<th>' + d[4] + '</th>';
							res += '</tr></thead>';
							$.each(c, function(a, b) {
								res += '<tr><td data-label="' + d[0] + '">' + b[1] + '</td><td data-label="' + d[1] + '">' + b[3] + '</td><td data-label="' + d[2] + '">' + b[4] + '</td><td data-label="' + d[3] + '">' + b[2] + '</td>';
								if(c[0][5] != "") res += '<td data-label="' + d[4] + '">' + b[5] + '</td>';
								res += '</tr>'
							});
							res += "</table>";
							$(".tool_result", e).html(res)
						}
					}
				});
				return !1
			});

<div id="too">
			<form id="to" method="post" name="to">
				<div class="fc">
					<label>a</label>
					<div class="wi">
						<input type="text" id="a" name="a" placeholder="">
					</div>
				</div>
				<div class="fc">
					<label>b</label>
					<div class="wi">
						<input type="text" id="b" name="b" placeholder="">
					</div>
				</div>
				<div class="fc">
					<label>c</label>
					<div class="wi">
						<input type="text" id="c" name="c" placeholder="">
					</div>
				</div>
				<div class="fc">
					<label>d</label>
					<div class="wi">
						<input type="text" id="d" name="d" placeholder="">
					</div>
				</div>
				<div class="wrap-btn"></div>
				<button class="button" name="submit" data-loader="Проверка...">ПРОВЕРИТЬ</button>
				<div class="wrap-btn"></div>
				<div class="tool_result"></div>
			</form>
		</div>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
glebovgin
@glebovgin
Full Stack Web Developer
Я правильно понял, что вы через свой какой-то сайт хотите отправить данные на второй сайт?
Есть сайт-2 имеет идентичную форму и у него нет проверки реферера, то данные с формы сайта-1 можете отправлять сразу на url сайта-2.
Если так не подходит, то сайт-1 принимает данные из формы (допустим через ajax), далее эти данные себе сохраняете или как-то обрабатываете и потом уже курлом отправляете на сайт-2.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы