2015-01-07 12 views
30

W jaki sposób wysyłać żądanie postu z GuzzleHttp (wersja 5.0). usiłuję wykonaj następujące czynności i coraz errorPHP GuzzleHttp. W jaki sposób tworzyć post z parametrami?

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

PHP Fatal error: przechwycony wyjątek 'InvalidArgumentException' z komunikatem 'żadna metoda może obsługiwać klucz email config'

Odpowiedz

30

Spróbuj

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

Metoda ta jest obecnie przestarzałe w 6.0. Zamiast "body" użyj "form_params". – jasonlfunk

+2

Przejście w opcji żądania "ciało" jako tablicy do wysłania żądania POST zostało uznane za przestarzałe. Użyj opcji "formularz_paramów", aby wysłać żądanie aplikacji/x-www-form-urlencoded lub opcję "wieloczęściową", aby wysłać żądanie wieloczęściowe/dane formularza. –

+0

@JeremyQuinton, więc to, co wybraliście intave tego ... proszę odpowiedzieć – Madhur

69

Od Odpowiedź Marco jest przestarzała, należy użyć następującej składni (zgodnie z komentarzem 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', 
    ] 
]); 

Zapytanie z plikami POST

$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' 
     ] 
    ] 
]); 

REST czasowniki korzystania z params

danych
// 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'); 

asynchroniczny POST

przydatne dla operacji długich serwerowych.

Documentation to więcej eksplikacji o nowych możliwościach.

+0

Jak mogę wysłać ciąg zapytania w zapytaniu pocztowym ? –

+0

Czego szukasz? Jeśli ciąg zapytania jest częścią adresu URL, musisz dodać go bezpośrednio w adresie URL, np. ** http: //www.example.com/user/create? Mode = dev "**. – jedema

+0

Próbuję wysłać wiadomość prosi o paypal z zakodowanymi danymi Url.Myślę jego klucz ['body'] –

14

Uwaga w chlać V6.0 +, innym źródłem otrzymuję następujący błąd może być nieprawidłowe użycie JSON jako tablica:

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.

Nieprawidłowa:

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

Prawidłowe :

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

Prawidłowe:

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