Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827

Передать и получить данные HTTP запросов используя curl

23.02.2023, 01:01. Показов 1628. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Следующий затык.
Есть задача с одного виртуального хоста (http://raznoe1) передать на другой (http://raznoe3) данные (массив данных) и распечатать на странице браузера. Понимаю, что чтобы передать http запрос без использования сторонних библиотек, нужно использовать curl. По идее это должно выглядеть так:
Файл raznoe1.php на первом хосте (http://raznoe1):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$url = "http://raznoe3/raznoe3.php";
$postdata = http_build_query(
    array(
        'var1' => 'один',
        'var2' => 'два',
        'var3' => 'три'
    )
);
 
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: text/plain',
        'content' => $postdata
    )
);
 
$ch = curl_init($url . '?' . $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);  // Для посмотреть, достукиваюсь или нет до страницы
curl_close($ch);
echo $html;
Файл raznoe3.php на хосте (http://raznoe3):
PHP
1
2
3
echo "Это разное3 пхп";
 
print_r($postdata);
В таком виде на странице raznoe1.php распечатывает, что "Это разное3 пхп" и Замечание (нотис), что невозможный массив. И на raznoe3.php тоже самое. Тут по идее должен быть Гет запрос на странице raznoe3.php, но все что пока получалось, работало по принципу варианта на странице raznoe1.php
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2023, 01:01
Ответы с готовыми решениями:

Как получить нужны данные из результата GET HTTP запроса || CURL
Добрый день, есть результат запроса GET. Как получить из этого результата только нужны данные ( мощность рад. облучения по областям )...

Не получается передать POST запрос, используя pear http
Здравствуйте, столкнулся со следующей проблемой. Есть 5 одинаковых скриптов (script1.php, script2.php .... script5.php). Каждый скрипт...

Получить данные с cURL
Есть код обращения к Яндекс.API переводчика: <?php $data = array( 'key' => 'КЛЮЧ', 'text' => ' тест.', 'lang'...

26
Заблокирован
24.02.2023, 04:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Тогда как проверить, какой запрос отправил с хоста?
Есть массив $_SERVER с помощью него можно много чего интересного узнать
Вот вводишь в строку браузера http://raznoe3/raznoe3.php?id=1&name=re
а на странице raznoe3.php обрабатываем запрос:
PHP
1
2
3
4
5
6
7
8
9
10
#http://raznoe3/raznoe3.php?id=1&name=re
if(isset($_GET['id']) && isset($_GET['name']))
{
    echo $_GET['id'].'<br>';
    echo $_GET['name'].'<br>';
    if(isset($_SERVER['HTTP_REFERER']))  echo $_SERVER['HTTP_REFERER'].'<br>';
    if(isset($_SERVER['REMOTE_ADDR']))   echo $_SERVER['REMOTE_ADDR'].'<br>';
    if(isset($_SERVER['HTTP_USER_AGENT'])) echo $_SERVER['HTTP_USER_AGENT'].'<br>';
    # и так далее
}
Если просто вставишь ссылку в браузер - то $_SERVER['HTTP_REFERER'] ничего не покажет. А если перейдешь по ссылке ( или курл или форма) - то увидишь откуда пришел это запрос.
1
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
24.02.2023, 09:20
Цитата Сообщение от POSE Посмотреть сообщение
Если просто вставишь ссылку в браузер - то $_SERVER['HTTP_REFERER'] ничего не покажет.
Ещё бы не забыть в CURL передать CURLOPT_REFERER что бы эта самая "HTTP_REFERER" была в переменной $_SERVER. Он же raznoe3.php вызывает из CURL
1
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
25.02.2023, 00:43  [ТС]
Цитата Сообщение от POSE Посмотреть сообщение
Есть массив $_SERVER с помощью него можно много чего интересного узнать
Не очень хотелось его задействовать. Тут на одном сервере планируется PHP, а на другом какая-то урезанная штука от С++. У неё есть библиотеки для работы с HTTP. Но возможно эта библиотека имеет аналогичный функционал. Ещё не разбирался.
Поэтому пока два выхода: использовать $_SERVER или сделать дополнительные поля и туда передавать значения. Возможно в этом случае пригодится JSON.

Цитата Сообщение от xkkx Посмотреть сообщение
Ещё бы не забыть в CURL передать CURLOPT_REFERER
Там этих параметров большущая таблица, пока не все посмотрел. Но вдруг заметил, что первым стоит CURLOPT_AUTOREFERER. Завтра попробую.

Цитата Сообщение от xkkx Посмотреть сообщение
У вас есть возможность отследить только 1 вариант из браузера.
Как тогда убедится, что отправляю именно POST?

Цитата Сообщение от xkkx Посмотреть сообщение
И вы уже выходите за рамки изначального вопроса.
Это я чувствую, пробую поймать границы, втиснуть все что можно в этой теме, затем новую начну. Эта ж тоже не первая по этому направлению ))) Но и тут пока не все стороны вопроса понятны
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
25.02.2023, 02:55
Цитата Сообщение от DyadyaGe Посмотреть сообщение
какая-то урезанная штука от С++
Скорее всего там есть возможность просмотреть входящий header

Цитата Сообщение от DyadyaGe Посмотреть сообщение
Как тогда убедится, что отправляю именно POST?
Добавить в raznoe3.php такой вот код
PHP
1
2
3
4
5
$requestInfo = 'Время запроса: ' . date("Y-m-d H:i:s");
$requestInfo .= 'Запрос методом: ' . $_SERVER['REQUEST_METHOD'] . PHP_EOL;
$requestInfo .= 'Параметры запроса: ' . print_r($_REQUEST, true) . PHP_EOL;
 
file_put_contents('requestLog.txt',  $requestInfo . PHP_EOL, FILE_APPEND | LOCK_EX);
И у вас будет мониторинг всех запросов рядом с файлом raznoe3.php

Добавлено через 12 минут
Вообще, удобно использовать подобие такой функции

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function filter_input_post_or_get($var_name, $filter = FILTER_UNSAFE_RAW, $options = 0, $defaultValue = null)
{
    if(filter_has_var(INPUT_POST, $var_name) === true) {
        $result = filter_input(INPUT_POST, $var_name, $filter, $options);
    } elseif(filter_has_var(INPUT_GET, $var_name) === true) {
        $result = filter_input(INPUT_GET, $var_name, $filter, $options);
    } elseif($defaultValue) {
        return $defaultValue;
    } else {
        return false;
    }
 
    if (($result === NULL || $result === FALSE) && ($defaultValue !== NULL)) {
        return $defaultValue;
    }
    return $result;
}
Вызывается вот так
PHP
1
2
3
$id = filter_input_post_or_get('id', FILTER_SANITIZE_NUMBER_INT, 0, 0);
$text = filter_input_post_or_get('text', FILTER_UNSAFE_RAW, 0, 'Пустая строка');
$array = filter_input_post_or_get('array', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY, []);
На основе функции https://www.php.net/manual/ru/... -input.php

Типы фильтров можно узнать в разделе https://www.php.net/manual/ru/filter.filters.php

Удобна тем, что позволяет обрабатывать входящие $_POST и $_GET запросы, не задумываясь о методе вызова. Заранее предусмотрев default параметр, если не будет нужного элемента. Избегая isset-empty-?? проверок.
1
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
26.02.2023, 00:53  [ТС]
Цитата Сообщение от xkkx Посмотреть сообщение
Скорее всего там есть возможность просмотреть входящий header
Сходу в библиотеке ничего такого не заметил. Но С++ в универе не учил, кроме пары лаб, а тут появилась необходимость. Но теоретически должно быть, потому что библиотека работает с HTTP. И вот чем дальше смотрю на эту библиотеку, тем больше задумываюсь о целесообразности использования CURL. Все больше думаю над JSON. Кстати, что скажите на это?
Цитата Сообщение от xkkx Посмотреть сообщение
И у вас будет мониторинг всех запросов рядом с файлом raznoe3.php
Шикарная функция. Хоть в лог её пиши, хоть используй для получения данных. Теоретически будет выдавать аналогичный результат, если работать с JSON вместо CURL
Правда по ней есть непонятка. Вернее по некоторым параметрам, если их добавить. Напр, если добавить так:
PHP
1
$requestInfo .= 'URI страницы, куда был запрос: ' . $_SERVER['REQUEST_URI'] . PHP_EOL;
Почему-то не пишет полный путь, только имя хоста, хотя вроде как в учебнике пишет:
Code
1
2
'REQUEST_URI'
URI, который был предоставлен для доступа к этой странице. Например, '/index.html'.
А если добавить вот так:
PHP
1
2
$requestInfo .= 'Аргументы: ' . $_SERVER['argс'] . PHP_EOL;
$requestInfo .= 'Массив аргументов: ' . $_SERVER['argv'] . PHP_EOL;
то ничего не распечатывает
Цитата Сообщение от xkkx Посмотреть сообщение
Вообще, удобно использовать подобие такой функции
С вот этой пока не разобрался, и сходу не запустилась, хотя выглядит интересно. Но самое прикольное - фильтры. Раньше с ними не сталкивался. Ну или не обращал внимание. Так что отдельное спасибо. В любом случае пригодится.
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
26.02.2023, 03:06
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Почему-то не пишет полный путь, только имя хоста, хотя вроде как в учебнике пишет:
На всем данным можно доверять

Цитата Сообщение от DyadyaGe Посмотреть сообщение
А если добавить вот так:
Это аргументы запуска скрипта, из bash\shell
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
26.02.2023, 22:10  [ТС]
Цитата Сообщение от xkkx Посмотреть сообщение
$params = [
    'postdata' => [
        'var1' => 'один',
        'var2' => 'два',
        'var3' => 'три'
    ];
]
$ch = curl_init('http://raznoe3/raznoe3.php');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $params
]);
$html = curl_exec($ch);
curl_close($ch);
echo $html;
Кстати, перепроверил, в логе пишет, что это POST.

Добавлено через 4 минуты
Цитата Сообщение от xkkx Посмотреть сообщение
На всем данным можно доверять
И моим в том числе ))) Спешил, опечатался. Немного не так. Наоборот, имя хоста не пишет, а пишет последний файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2023, 22:10

Получить данные с curl
Всем привет, в общем уже бьюсь несколько дней и всё пока без толку. Ситуация такая, есть сайт с флеш играми flashplayer_ru, все данные...

При помощи curl передать уже набранные данные со своего компьютера в форму на сайте
Приветствую всех! Меня интересует такой вопрос Есть сайт с множествами полей для заполнение, можно ли сразу при помощи curl передать...

Как получить ответ через POST используя CURL?
Здравствуйте! Нужно получить данные праздников, которые приходят с сервера через Ajax. Сайт https://www.investing.com/holiday-calendar/ ...

Как получить ВЕСЬ html код сайта, используя curl?
Здравствуйте! У меня проблема с самим понятием что искать, так как в теме веб программирования я не разбираюсь (моя программа на c++). Суть...

Не могу получить данные через curl. Что не так?
Всем привет! Пдскажите, как исправить проблему. Не удается получить данные с сайта, хотя сервисы проверки ответа ответ получают. И из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru