RelianceOnGod
@RelianceOnGod

Как передать данные из формы через cURL?

Пытался всяко разно сделать передачу данных из формы на сайт (api) через curl, но видимо что-то не так понимаю в этой библиотеке, хоть примеров и много в интернете. Можете подсказать, как передать их? Заранее благодарю <3

Код с формой:
<div id="popup1" class="mfp-hide popup">
        <h2 class="popup-title">Справка о периоде обучения</h2>
        <form class="reference-form" action="">
            <div class="reference-select">
                <select class="groups" name="groups" id="groups">
                    <option value="default" disabled selected>Выберите группу</option>
                    <?php
                    $groups = loadGroups();
                    foreach($groups as $group){
                    ?>
                    <option id="<?=$group['id']?>" value="<?=$group['id']?>"><?=$group['name']?></option>
                    <?php } ?>
                </select>
            </div>
            <div class="reference-select">
                <select class="obiturients" name="obiturients" id="obiturients">
                    <option value="default" disabled selected>ФИО</option>
                </select>
            </div>
            <button class="reference-btn">Создать</button>
        </form>
    </div>

```

Код ajax
$(function () {
    $('.reference-link').magnificPopup();
    $('.groups').change(function () {
    let gid = $(this).val();
    let form = $(this).closest('form');
    $.ajax({
        url: 'data.php',
        method: 'post',
        data: {gid: gid}
    }).done(function (obiturient) {
        console.log(obiturient);
        obiturient = JSON.parse(obiturient);
        form.find('[name="obiturients"]').empty();
        obiturient.forEach(function (obiturient) {
            form.find('[name="obiturients"]').append('<option value='+ obiturient.id +'>' + obiturient.O_fam + ' ' +  obiturient.O_name + ' ' + obiturient.O_otch + '</option>')
        })
    })

})

})


```
Нужно передать именно
append('<option value='+ obiturient.id +'>
data.php
<?php
require_once 'db.php';
if (isset($_POST['gid'])) {
    global $obiturient;
    $connection = new mysqli('localhost', 'root', 'root', 'rups');
    $stmt = $connection->query("SELECT * FROM `obiturient` WHERE `group_id`= " . $_POST['gid']);
    $obiturient = $stmt->fetch_all(MYSQLI_ASSOC);
    echo json_encode($obiturient);
}
function loadGroups(){
    global $groups;
    $connection = new mysqli('localhost', 'root', 'root', 'rups');
    $stmt = $connection->query("SELECT * FROM `groups`");
    $groups = $stmt->fetch_all(MYSQLI_ASSOC);
    return $groups;
}

```

Сам cURL:
$curl = curl_init(); //инициализация сеанса
curl_setopt($curl, CURLOPT_URL, 'http://diplom/example.php'); //урл сайта к которому обращаемся
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 (
'obiturients'=>$_POST['obiturients'],
));
curl_setopt($curl, CURLOPT_USERAGENT, 'MSIE 5'); //эта строчка как-бы говорит: "я не скрипт, я IE5" :)
curl_setopt ($curl, CURLOPT_REFERER, "http://ya.ru"); //а вдруг там проверяют наличие рефера
$res = curl_exec($curl);

curl_close($curl);

из второго бокса формы , но у меня не получилось вытащить value по примерам из интернета и отправить это значение. Еще раз благодарю заранее за Вашу помощь.

Скриншот того, что мы получаем при отправке:

60a16991ad609333924694.jpeg

Ну и самое главное, я не понимаю, данные отправляются вообще через cURl, или же нет? Всем спасибо за ответ и помощь заранее.
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ответы на вопрос 1
@zkrvndm
Боты, парсеры, расширения
Если вам просто нужно переслать форму со своего сайта на какой-то левый сайт, делайте так.

Создайте файл test.php со следующим содержимым:
Нажмите здесь, чтобы развернуть скрытый текст
<?php

// Указываем браузеру, что ответ будет текстом:
header('Content-Type: text/plain; charset=utf-8');

// Включаем показ ошибок:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

// Если это POST-запрос:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

	// Адрес для пересылки формы:
	$url = 'http://diplom/example.php';

	// Конвертируем все полученные данные с формы
	// в строку application/x-www-form-urlencoded:

	$vars = http_build_query($_POST);

	// Создаём новый сеанс:
	$curl = curl_init();

	// Указываем адрес целевой страницы:
	curl_setopt($curl, CURLOPT_URL, $url);

	// О отключаем проверку SSL сертификата:
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);

	// Устанавливаем заголовки для имитации браузера:

	$headers = array(
		'Accept: */*',
		'Accept-Encoding: identify',
		'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
		'Connection: keep-alive',
		'Content-Length: '.strlen($vars),
		'Content-Type: application/x-www-form-urlencoded',
		'Host: '.parse_url($url)['host'],
		'Origin: '.parse_url($url)['scheme'].'://'.parse_url($url)['host'],
		'Referer: '.parse_url($url)['scheme'].'://'.parse_url($url)['host'].'/',
		'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"',
		'sec-ch-ua-mobile: ?0',
		'Sec-Fetch-Dest: empty',
		'Sec-Fetch-Mode: cors',
		'Sec-Fetch-Site: cross-site',
		'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
	);

	curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

	// Указываем, что у нас POST запрос:
	curl_setopt($curl, CURLOPT_POST, 1);

	// Разрешаем переадресацию:
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

	// Запрещаем прямяой вывод результата запроса:
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

	// Добавляем данные для отправки:
	curl_setopt($curl, CURLOPT_POSTFIELDS, $vars);

	// Делаем сам запрос:
	$result = curl_exec($curl);

	// Завершаем сеанс:
	curl_close($curl);

	// Выводим результат:
	echo $result;

}

Далее, на этот файл test.php отсылайте свою форму и php-скрипт внутри него перешлет форму туда, куда вы указали.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы