6

Пример использования PHP и cURL для HTTP POST запроса?

26

Можете ли вы показать мне, как выполнить HTTP POST запрос с помощью PHP и cURL?

Мне нужно отправить данные в следующем формате:

username=user1&password=passuser1&gender=1

На адрес www.example.com.

Я ожидаю, что cURL вернет ответ в виде result=OK. Есть ли примеры, как это сделать?

5 ответ(ов)

10

Вы можете использовать следующий пример кода на PHP, который отправляет HTTP POST запрос на удалённый сайт. Этот код демонстрирует, как использовать библиотеку cURL для выполнения запроса:

//
// Очень простой пример на PHP для отправки HTTP POST запроса на удалённый сайт
//

$ch = curl_init(); // Инициализируем cURL

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/tester.phtml"); // Указываем URL для POST запроса
curl_setopt($ch, CURLOPT_POST, true); // Указываем, что это POST запрос
curl_setopt($ch, CURLOPT_POSTFIELDS, 
          http_build_query(array('postvar1' => 'value1'))); // Указываем данные, которые будем отправлять

// Получаем ответ от сервера ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Настраиваем получение ответа как строку

$server_output = curl_exec($ch); // Выполняем запрос

curl_close($ch); // Закрываем cURL

// Дальнейшая обработка ...
if ($server_output == "OK") { 
    // Если ответ "OK", выполняем действия
} else { 
    // В противном случае выполняем другие действия
}

В этом примере мы инициализируем cURL, настраиваем его для выполнения POST запроса с помощью curl_setopt, отправляем данные через curl_exec и затем обрабатываем ответ от сервера. Не забудьте обработать возможные ошибки и исключения для более надёжного кода.

0

Пример использования PHP curl_exec для выполнения HTTP POST запроса

Поместите следующий код в файл с именем foobar.php:

<?php
  $ch = curl_init();
  $skipper = "люксовый штурмовой recreational vehicle";
  $fields = array( 'penguins'=>$skipper, 'bestpony'=>'rainbowdash');
  $postvars = '';
  foreach($fields as $key=>$value) {
    $postvars .= $key . "=" . $value . "&";
  }
  $url = "http://www.google.com";
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, 1);                // 0 для GET-запроса
  curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,3);
  curl_setopt($ch, CURLOPT_TIMEOUT, 20);
  $response = curl_exec($ch);
  print "Ответ curl: " . $response;
  curl_close($ch);
?>

Затем выполните его с помощью команды php foobar.php. В результате вы получите на экране примерно такой вывод:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Заголовок</title>

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<body>
  Гора контента...
</body>
</html>

Таким образом, вы отправили POST-запрос на www.google.com и передали некоторые данные. Если бы сервер был настроен на чтение входных переменных, он мог бы выполнить какие-то действия на основе полученной информации.

0

Это можно легко достичь с помощью следующего кода:

<?php

$post = [
    'username' => 'user1',
    'password' => 'passuser1',
    'gender'   => 1,
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.domain.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$response = curl_exec($ch);
var_export($response);

В этом примере мы создаем массив $post, содержащий данные, которые мы хотим отправить на сервер. Затем инициализируем cURL, устанавливаем URL, на который будет отправлен запрос, и указываем, что мы хотим получить результат в виде строки. После этого мы передаем наши данные с помощью CURLOPT_POSTFIELDS, а затем выполняем запрос с помощью curl_exec(). Наконец, выводим ответ с помощью var_export().

0

1. Пошаговое руководство

  • Инициализация сессии cURL:
$url = "www.domain.com";
$ch = curl_init($url);
  • Если ваш запрос содержит заголовки, такие как bearer token или определяет JSON-содержимое, вам необходимо установить параметры CURLOPT_HTTPHEADER для cURL:
$token = "сгенерированный токен";
curl_setopt(
    $ch, 
    CURLOPT_HTTPHEADER, 
    array(
        'Content-Type: application/json', // для определения типа содержимого как JSON
        'bearer: '.$token, // отправить токен в заголовке запроса
        'Content-length: 100' // длина содержимого, например, 100 символов (можно добавить через strlen($fields))
    )
);
  • Если вы хотите включить заголовок в вывод, установите CURLOPT_HEADER в значение true:
curl_setopt($ch, CURLOPT_HEADER, false);
  • Установите параметр CURLOPT_RETURNTRANSFER в true, чтобы вернуть результат в виде строки, а не выводить его непосредственно:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  • Для проверки существования общего имени в SSL-сертификате стороны можно установить значение 0 (не проверять имена), 1 (не поддерживается в cURL 7.28.1), 2 (значение по умолчанию и режим для продакшена):
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  • Для отправки полей в виде массива через cURL:
$fields = array(
    "username" => "user1",
    "password" => "passuser1",
    "gender" => 1
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
  • Выполните cURL и верните строку. В зависимости от вашего ресурса это возвращает вывод, например, result=OK:
$result = curl_exec($ch);
  • Закройте ресурс cURL и освободите системные ресурсы:
curl_close($ch);

2. Использование в классе

  • Полный класс call_cURL, который можно расширять:
class class_name_for_call_cURL {
    protected function getUrl() {
        return "www.domain.com";
    }

    public function call_cURL() {
        $token = "сгенерированный токен";

        $fields = array(
            "username" => "user1",
            "password" => "passuser1",
            "gender" => 1
        );

        $url = $this->getUrl();
        $output = $this->_execute($fields, $url, $token);
        
        // если вы хотите получить данные в формате JSON
        // $output = json_decode($output);
            
        if ($output == "OK") {
            return true;
        } else {
             return false;
        }
    }

    private function _execute($postData, $url, $token) {
        // для отправки данных в формате JSON
        $fields = json_encode($postData);

        $ch = curl_init($url);
        curl_setopt(
            $ch, 
            CURLOPT_HTTPHEADER, 
            array(
                'Content-Type: application/json', // если тип содержимого - JSON
                'bearer: '.$token // если вам нужен токен в заголовке
            )
        );
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

        $result = curl_exec($ch);
        curl_close($ch);

        return $result;
    }
}
  • Использование класса и вызов cURL:
$class = new class_name_for_call_cURL();
var_dump($class->call_cURL()); // вывод будет true/false

3. Одна функция

  • Функция для использования в любом месте, где это необходимо:
function get_cURL() {

        $url = "www.domain.com";
        $token = "сгенерированный токен";

        $postData = array(
            "username" => "user1",
            "password" => "passuser1",
            "gender" => 1
        );

        // для отправки данных в формате JSON
        $fields = json_encode($postData);

        $ch = curl_init($url);
        curl_setopt(
            $ch, 
            CURLOPT_HTTPHEADER, 
            array(
                'Content-Type: application/json', // если тип содержимого - JSON
                'bearer: '.$token // если вам нужен токен в заголовке
            )
        );
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

        $result = curl_exec($ch);
        curl_close($ch);

        return $result;
}
  • Эта функция доступна просто через:
var_dump(get_cURL());
0

Вот пример функции для выполнения POST-запроса с помощью cURL в PHP, с обработкой ошибок и установкой заголовков:

function curlPost($url, $data = NULL, $headers = NULL) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    if (!empty($data)) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }

    if (!empty($headers)) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }

    $response = curl_exec($ch);

    // Проверка на наличие ошибок cURL
    if (curl_error($ch)) {
        trigger_error('Ошибка cURL: ' . curl_error($ch));
    }

    curl_close($ch);
    return $response;
}

// Пример использования функции
curlPost('https://google.com', [
    'username' => 'admin',
    'password' => '12345',
]);

В данной функции curlPost() создаётся cURL-сеанс, устанавливаются необходимые параметры, такие как URL и данные POST-запроса. Также предусмотрена возможность установки пользовательских заголовков. После выполнения запроса проверяется наличие ошибок с помощью curl_error(). Если ошибки есть, они обрабатываются с помощью trigger_error(), что позволяет лучше понимать, что пошло не так. В итоге функция возвращает ответ сервера.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь