Пример использования PHP и cURL для HTTP POST запроса?
Можете ли вы показать мне, как выполнить HTTP POST запрос с помощью PHP и cURL?
Мне нужно отправить данные в следующем формате:
username=user1&password=passuser1&gender=1
На адрес www.example.com
.
Я ожидаю, что cURL вернет ответ в виде result=OK
. Есть ли примеры, как это сделать?
5 ответ(ов)
Вы можете использовать следующий пример кода на 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
и затем обрабатываем ответ от сервера. Не забудьте обработать возможные ошибки и исключения для более надёжного кода.
Пример использования 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 и передали некоторые данные. Если бы сервер был настроен на чтение входных переменных, он мог бы выполнить какие-то действия на основе полученной информации.
Это можно легко достичь с помощью следующего кода:
<?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()
.
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());
Вот пример функции для выполнения 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()
, что позволяет лучше понимать, что пошло не так. В итоге функция возвращает ответ сервера.
Как получить миниатюру видео с YouTube с помощью YouTube API?
Как отправить POST-запрос с помощью PHP?
UTF-8 на всех уровнях!
Ошибка JSONDecodeError: Ожидалось значение: строка 1, столбец 1 (символ 0)
Вставка нового элемента в массив в любом месте в PHP