Отправить 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: 9 комментариев

  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

  3. Доброго времени суток!
    Добрые люди, подскажите, мне не понятно как отправлять Post-запрос: по ссылки https://online.petrolplus.ru/public-api/v1/transaction-list
    чтобы в теле запроса передать json структуру:
    {
    “token”: “ hupevm8KsaxuUhyEBRznmMjg2”,
    “dateFrom”: “2015-05-01”,
    “dateTo”: “2015-05-03”,
    “format”: “JSON”
    }

    Можете описать последовательность действий для чайников?
    Заранее благодарен,
    С Уважением, Евгений

    1. Если через file_get_contents то вероятнее всего:

      $url = ‘https://online.petrolplus.ru/public-api/v1/transaction-list?’;
      $data= [‘token’=>’ hupevm8KsaxuUhyEBRznmMjg2′, ‘dateFrom’ =>’2015-05-01′, ‘dateTo’=>’2015-05-03’, ‘format’=>’JSON’];
      $postdata = http_build_query($arr)
      $context = array(‘http’=>
      array(‘method’ => ‘POST’,’header’ => ‘Content-type: application/x-www-form-urlencoded’,’content’ =>$data);
      $context = stream_context_create($context);

      $result = file_get_contents($url, false, $context);

      1. Выше отправил ответ с опечатками. Вот работающий код:

        $url = ‘https://online.petrolplus.ru/public-api/v1/transaction-list?’;
        $data= [‘token’=>’ hupevm8KsaxuUhyEBRznmMjg2′, ‘dateFrom’ =>’2015-05-01′, ‘dateTo’=>’2015-05-03’, ‘format’=>’JSON’];
        $postdata = http_build_query($data);
        $context = array(‘http’=>
        array(‘method’ => ‘POST’,’header’ => ‘Content-type: application/x-www-form-urlencoded’,’content’ =>$postdata );
        $context = stream_context_create($context);

        $result = file_get_contents($url, false, $context);

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

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

*

code