Создание POST/ GET запросов с помощью PHP

Создание POST-запросов с помощью PHP

Первый метод для выполнения PHP POST запроса заключается в использовании file_get_contents. Второй метод будет использовать fread в сочетании с парой других функций. Оба варианта применяют функцию stream_context_create, чтобы заполнить необходимые поля заголовка запроса.

Пояснение кода

Переменная $sPD содержит данные, которые нужно передать. Она должна иметь формат строки HTTP-запроса, поэтому некоторые специальные символы должны быть закодированы.

И в функции file_get_contents, и в функции fread у нас есть два новых параметра. Первый из них — use_include_path. Так как мы выполняем HTTP- запрос, в обоих примерах он будет иметь значение false. При использовании значения true для считывания локального ресурса функция будет искать файл по адресу include_path.

Второй параметр — context, он заполняется возвращаемым значением stream_context_create, который принимает значение массива $aHTTP.

Использование file_get_contents для выполнения POST-запросов

Чтобы в PHP отправить POST запрос с помощью file_get_contents, нужно применить stream_context_create, чтобы вручную заполнить поля заголовка и указать, какая «обертка» будет использоваться — в данном случае HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST 
$sPD = "name=Jacob&bench=150"; // Данные POST
$aHTTP = array(
  'http' => // Обертка, которая будет использоваться
    array(
    'method'  => 'POST', // Метод запроса
    // Ниже задаются заголовки запроса
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $sPD
  )
);
$context = stream_context_create($aHTTP);
$contents = file_get_contents($sURL, false, $context);
echo $contents;

Использование fread для выполнения POST-запросов

Для выполнения POST-запросов можно использовать функцию fread. В следующем примере stream_context_create используется для составления необходимых заголовков HTTP-запроса:

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST
$sPD = "name=Jacob&bench=150"; // Данные POST
$aHTTP = array(
  'http' => // Обертка, которая будет использоваться
    array(
    'method'  => 'POST', // Request Method
    // Ниже задаются заголовки запроса
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $sPD
  )
);
$context = stream_context_create($aHTTP);
$handle = fopen($sURL, 'r', false, $context);
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);

echo $contents;

Выполнение GET-запросов с помощью PHP

Теперь мы уделим внимание использованию fread и file_get_contents для загрузки контента из интернета через HTTP и HTTPS. Чтобы использовать методы, описанные в этой статье, необходимо активировать опцию fopen wrappers. Для этого в файле php.ini нужно установить для параметра allow_url_fopen значение On.

Выполнение POST и GET запросов PHP применяется для входа в систему на сайтах, получения содержимого веб-страницы или проверки новых версий приложений. Мы расскажем, как выполнять простые HTTP-запросы.

Использование fread для загрузки или получения файлов через интернет

Помните, что считывание веб-страницы ограничивается доступной частью пакета. Так что нужно использовать функцию stream_get_contents (аналогичную file_get_contents) или цикл while, чтобы считывать содержимое меньшими фрагментами до тех пор, пока не будет достигнут конец файла:

<?php
$handle = fopen("http://brugbart.com/", "rb");
$contents = stream_get_contents($handle);
fclose($handle);
?>
<?php
$handle = fopen("http://brugbart.com/", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
echo $contents;
?>

В данном случае обработки POST запроса PHP последний аргумент функции fread равен размеру фрагмента. Он, как правило, не должен быть больше, чем 8192 (8*1024).

Имейте в виду, что он может быть больше или меньше, а также может быть ограничен настройками системы, на которой запускается PHP.

Использование file_get_contents для получения URL-адреса сайта

Еще проще использовать этот метод при считывании файла по HTTP, так как вам не придется заботиться о считывании по фрагментам — все обрабатывается в PHP.

<?php
$homepage = file_get_contents('http://brugbart.com/');
echo $homepage;
?>

Перевод статьи «Making POST Requests With PHP» был подготовлен дружной командой проекта Сайтостроение от А до Я.