Отправить POST запрос на сторонний сайт с помощью file_get_contents

Отправить POST запрос на сторонний сайт с помощью file_get_contentsВ этой статье я хочу показать как с помощью php функции file_get_contents можно отправлять post запрос. Запрос можно делать ка на свой сервер так и на сторонний. Для примера можно создать локальный тестовый домен test.web, и создать в его корне скрипт index.php с таким кодом:

$a = $_POST['a'];
$b = $_POST['b'];
echo $a + $b;

Теперь необходимо создать другой локальный сайт, например test_2.web. На этом сайте создадим такой скрипт:

// массив для переменных, которые будут переданы с запросом
$paramsArray = array(
    'a' => '5', 
    'b' => '10'
); 
 // преобразуем массив в URL-кодированную строку
$vars = http_build_query($paramsArray);
// создаем параметры контекста
$options = array(
    'http' => array(  
                'method'  => 'POST',  // метод передачи данных
                'header'  => 'Content-type: application/x-www-form-urlencoded',  // заголовок 
                'content' => $vars,  // переменные
            )  
);  
$context  = stream_context_create($options);  // создаём контекст потока
$result = file_get_contents('http://test.web/index.php', false, $context); //отправляем запрос
var_dump($result); // вывод результата

После запуска скрипта, результат должен быть число 15.
На этом все, оказывается отправка пост-запросов можно сделать быстро и просто, и не обязательно использовать cUrl.

Рассказать друзьям:


Отправить POST запрос на сторонний сайт с помощью file_get_contents: 4 комментария

  1. Подскажите что должно быть в файле на сервер чтобы результат выполнения данного скрипта был такой:
    string(1) «1»

    Вроде это просто тупо 1, но ни echo 1; ни print 1; ни просто 1 без php не дают такого ответа((

    1. Достаточно даже без php вывести любой текст. Возможно вы посылаете запрос не на тот адрес? Что у Вас на данный момент выводится в результате?

  2. Здравствуйте, прошло много времени, но надеюсь ответите.
    Такая проблема,
    необходимо из формы отправить данные через POST на другой сервер, где там они заносятся в базу. Локально для теста создан проект, который обрабатывается отельным php (‘p.php’), который в свою очередь отправляет через file_get_content в другой php (‘p2.php’).
    делаю все как указано:
    p.php:

    $paramArray = array(/*переменные*/);
    $vars = http_build_query($paramArray);

    $options = array('http' => array(
    'method' => 'POST', // метод передачи данных
    'header' => 'Content-type: application/x-www-form-urlencoded', // заголовок
    'content' => $vars
    ));
    $context = stream_context_create($options);

    $result = file_get_contents('./php2.php', false, $context); //отправляем запрос

    p2.php

    //подключение БД

    //Заполнение из форм
    /*тут заполнение из POSTа типа:*/
    $name = $_POST['name'];

    //Вставка в БД
    $q = "INSERT INTO `order` SET
    /*параметры, все проверено, отдельно добавляют все правильно*/
    $r = mysqli_query($res, $q);

    Что я делаю не так? При подключении напрямую p2.php работает все правильно. Но мне необходимо, что бы это делалось через отправку через POST

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*