cURL - Come inviare e recuperare dati in WordPress

7 feb 2018, 19:08:16
Visualizzazioni: 40.4K
Voti: 1

CONTESTO

Dopo che l'utente su domain1 clicca un link verso domain2, ho bisogno di inviare anche i dati utente (username, email,..) dal server1/domain1 al server2/domain2 e salvarli temporaneamente nel database del server2.

Entrambi sono siti WordPress.

LAVORO ATTUALE

Diciamo che $url = 'http://my-domain2.com'; Finora ho scoperto che cURL può fare questo lavoro:

function curlTest($url, $fields){

  try{

      $ch = curl_init($url);

      if (!$ch)
        throw new Exception('Inizializzazione fallita');

      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; //status 200 = successo


      } catch(Exception $e) {

          trigger_error(sprintf(
              'Curl fallito con errore #%d: %s',
              $e->getCode(), $e->getMessage()),
              E_USER_ERROR);

      }
}

o orientato agli oggetti come descritto qui.

Successivamente ho trovato una soluzione WordPress come questa:

$response = wp_remote_post( $url, array( 'data' => $fields) );

spiegata qui.

La chiamata cURL sembra avere successo, ma non ho idea di come recuperare i dati sull'altro server. Finora ho messo i dati utente sul server1 in un array ($fields) e uso POST per inviarli al server2. Ma come posso recuperare i dati sul server2?

Secondo l'esempio di Ed Cradock sotto la documentazione ufficiale sembra essere possibile catturare la richiesta sull'altro lato con questo codice:

   if($_SERVER['REQUEST_METHOD'] == 'PUT') 
    { 
       parse_str(file_get_contents('php://input'), $requestData); 

       print_r($requestData); 

       // Salva i dati richiesti nel database qui
    } 

Ma non funziona per me perché suppongo che l'URL sia sbagliato: http://my-domain2.com/<cosa-qui?>

DOMANDA

Come recuperare i dati di una richiesta POST cURL con WordPress in modo sicuro?

3
Commenti

Come è collegata la tua domanda con WordPress? E, per favore, fai una domanda alla volta.

Max Yudin Max Yudin
7 feb 2018 19:12:38

Ok, ho fatto una domanda. E non conosco il modo WordPress di usare cURL

murcoder murcoder
7 feb 2018 19:35:37

C'è un motivo particolare per cui stai usando curl direttamente invece delle API HTTP di WP?

Tom J Nowell Tom J Nowell
7 feb 2018 19:44:29
Tutte le risposte alla domanda 2
0

wp_remote_get(), wp_remote_post() e wp_remote_request() dovrebbero rispondere alle tue domande. Questa è la pratica migliore per WordPress.

7 feb 2018 19:27:45
1

wp_remote_post, che è preferibile utilizzare rispetto alla chiamata diretta di curl, invia una richiesta POST all'altro lato, il che significa che puoi semplicemente recuperarla con la variabile globale $_POST. Non c'è alcuna ragione o necessità di utilizzare richieste PUT per quello che stai facendo.

7 feb 2018 20:02:01
Commenti

Grazie! Ho già fatto molte ricerche, ma non riesco a trovare un esempio su come recuperare i dati dall'altro server. Come posso ascoltare su server2 i dati provenienti da server1? Immagino di dover scrivere la mia API? C'è della documentazione? Semplicemente if($_POST['username']){ //fai qualcosa} non funzionerà, immagino

murcoder murcoder
8 feb 2018 19:10:38