2015-01-07 23 views
30

Come effettuare la richiesta di posta con GuzzleHttp (versione 5.0). Sto provando effettuare le seguenti operazioni e ottenere l'errore Fatal errorPHP GuzzleHttp. Come effettuare la richiesta post con i parametri?

$client = new \GuzzleHttp\Client(); 
$client->post(
    'http://www.example.com/user/create', 
    array(
     'email' => '[email protected]', 
     'name' => 'Test user', 
     'password' => 'testpassword' 
    ) 
); 

PHP: Uncaught eccezione 'InvalidArgumentException' con il messaggio 'Nessun metodo in grado di gestire la chiave di e-mail config'

risposta

30

Prova questo

$client = new \GuzzleHttp\Client(); 
$client->post(
    'http://www.example.com/user/create', 
    array(
     'body' => array(
      'email' => '[email protected]', 
      'name' => 'Test user', 
      'password' => 'testpassword' 
     ) 
    ) 
); 
+46

Questo metodo è ora deprecato in 6.0. Invece di "corpo" usa "form_params". – jasonlfunk

+2

Il passaggio all'opzione di richiesta "corpo" come una matrice per inviare una richiesta POST è stata deprecata. Utilizzare l'opzione di richiesta "form_params" per inviare una richiesta application/x-www-form-urlencoded o un'opzione di richiesta "multipart" per inviare una richiesta multipart/form-data. –

+0

@JeremyQuinton, quindi quello che hai selezionato è quello che vuoi ... per favore rispondi – Madhur

69

Dal La risposta di Marco è deprecata, è necessario utilizzare la seguente sintassi (in base al commento di jasonlfunk):

$client = new \GuzzleHttp\Client(); 
$response = $client->request('POST', 'http://www.example.com/user/create', [ 
    'form_params' => [ 
     'email' => '[email protected]', 
     'name' => 'Test user', 
     'password' => 'testpassword', 
    ] 
]); 

richiesta con i file POST utilizzo

$response = $client->request('POST', 'http://www.example.com/files/post', [ 
    'multipart' => [ 
     [ 
      'name'  => 'file_name', 
      'contents' => fopen('/path/to/file', 'r') 
     ], 
     [ 
      'name'  => 'csv_header', 
      'contents' => 'First Name, Last Name, Username', 
      'filename' => 'csv_header.csv' 
     ] 
    ] 
]); 

verbi riposo con params

dati
// PUT 
$client->put('http://www.example.com/user/4', [ 
    'body' => [ 
     'email' => '[email protected]', 
     'name' => 'Test user', 
     'password' => 'testpassword', 
    ], 
    'timeout' => 5 
]); 

// DELETE 
$client->delete('http://www.example.com/user'); 

Async POST

utile per le operazioni del server lunghi.

$client = new \GuzzleHttp\Client(); 
$promise = $client->requestAsync('POST', 'http://www.example.com/user/create', [ 
    'form_params' => [ 
     'email' => '[email protected]', 
     'name' => 'Test user', 
     'password' => 'testpassword', 
    ] 
]); 
$promise->then(
    function (ResponseInterface $res) { 
     echo $res->getStatusCode() . "\n"; 
    }, 
    function (RequestException $e) { 
     echo $e->getMessage() . "\n"; 
     echo $e->getRequest()->getMethod(); 
    } 
); 

Documentation è più esplicita su nuove possibilità.

+0

Come posso inviare una stringa di query in post richiesta ? –

+0

Cosa stai cercando? Se la stringa di query è una parte dell'URL, devi aggiungerla direttamente nell'URL come ** http: //www.example.com/user/create? Mode = dev "**. – jedema

+0

Sto tentando di inviare post richiesta di paypal con i dati codificati url Penso che sia la chiave ['body'] –

14

Nota in Guzzle V6.0 +, un'altra fonte di ottenere il seguente errore può essere corretto utilizzo di JSON come un array:

Passing in the "body" request option as an array to send a POST request has been deprecated. Please use the "form_params" request option to send a application/x-www-form-urlencoded request, or a the "multipart" request option to send a multipart/form-data request.

errato:

$response = $client->post('http://example.com/api', [ 
    'body' => [ 
     'name' => 'Example name', 
    ] 
]) 

corretto :

$response = $client->post('http://example.com/api', [ 
    'json' => [ 
     'name' => 'Example name', 
    ] 
]) 

corretta:

$response = $client->post('http://example.com/api', [ 
    'headers' => ['Content-Type' => 'application/json'], 
    'body' => json_encode([ 
     'name' => 'Example name', 
    ]) 
]) 
Problemi correlati