cURL - Как отправлять и получать данные в WordPress

7 февр. 2018 г., 19:08:16
Просмотры: 40.4K
Голосов: 1

ПРЕДПОСЫЛКИ

После того как пользователь на 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?

3
Комментарии

Как ваш вопрос связан с WordPress? И, пожалуйста, задавайте один вопрос за раз.

Max Yudin Max Yudin
7 февр. 2018 г. 19:12:38

Хорошо, я задал один вопрос. И я не знаю, как правильно использовать cURL в WordPress.

murcoder murcoder
7 февр. 2018 г. 19:35:37

Есть ли особая причина, по которой вы используете curl напрямую вместо HTTP API WordPress?

Tom J Nowell Tom J Nowell
7 февр. 2018 г. 19:44:29
Все ответы на вопрос 2
0

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

7 февр. 2018 г. 19:27:45
1

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

7 февр. 2018 г. 20:02:01
Комментарии

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

murcoder murcoder
8 февр. 2018 г. 19:10:38