cURL - Как отправлять и получать данные в WordPress
ПРЕДПОСЫЛКИ
После того как пользователь на domain1 переходит по ссылке на domain2, мне нужно также отправить пользовательские данные (имя пользователя, email,..) с server1/domain1 на server2/domain2 и временно сохранить их в базе данных server2.
Оба сайта работают на WordPress.
ТЕКУЩАЯ РАБОТА
Допустим, $url = 'http://my-domain2.com'
;
Я выяснил, что cURL может выполнить эту задачу:
function curlTest($url, $fields){
try{
$ch = curl_init($url);
if (!$ch)
throw new Exception('Не удалось инициализировать');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (!$response)
throw new Exception(curl_error($ch), curl_errno($ch));
curl_close( $ch );
return (int) $status; //статус 200 = успех
} catch(Exception $e) {
trigger_error(sprintf(
'Curl завершился с ошибкой #%d: %s',
$e->getCode(), $e->getMessage()),
E_USER_ERROR);
}
}
или объектно-ориентированным способом, как описано здесь.
Позже я нашел решение для WordPress в таком виде:
$response = wp_remote_post( &url, array( 'data' => $fields) );
объясненное здесь.
Вызов cURL кажется успешным, но я не знаю, как получить данные на другом сервере. Пока что я помещаю пользовательские данные на server1 в массив ($fields) и использую POST для отправки на server2. Но как я могу получить данные на server2?
Согласно примеру Эда Крэдока ниже в официальной документации, кажется возможным получить запрос на другой стороне с помощью этого кода:
if($_SERVER['REQUEST_METHOD'] == 'PUT')
{
parse_str(file_get_contents('php://input'), $requestData);
print_r($requestData);
// Здесь сохраняем полученные данные в базу данных
}
Но у меня это не работает, потому что я думаю URL неверный: http://my-domain2.com/<что-здесь?>
ВОПРОС
Как безопасно получить данные POST cURL запроса в WordPress?

wp_remote_get(), wp_remote_post() и wp_remote_request() должны ответить на ваши вопросы. Это лучшие практики для WordPress.

wp_remote_post
, который предпочтительнее использовать вместо прямого вызова curl, отправляет POST-запрос на сервер. Это означает, что данные можно получить с помощью глобальной переменной $_POST
. Нет никакой причины или необходимости использовать PUT-запросы для вашей задачи.

Спасибо! Я уже много исследовал, но не могу найти пример, как получать данные на другом сервере. Как я могу слушать на server2 данные с server1? Полагаю, мне нужно написать собственный API? Есть какая-то документация? Простое if($_POST['username']){ //сделать что-то} не сработает, я думаю
