guzzlehttp example docs consume baseuri async php postman guzzle

php - docs - guzzlehttp client example



¿Cómo puedo usar Guzzle para enviar una solicitud POST en JSON? (10)

¿Alguien sabe la forma correcta de post JSON usando Guzzle ?

$request = $this->client->post(self::URL_REGISTER,array( ''content-type'' => ''application/json'' ),array(json_encode($_POST)));

Recibo una respuesta de internal server error del servidor. Funciona con Chrome Postman .


@ user3379466 es correcto, pero aquí reescribo completo:

-package that you need: "require": { "php" : ">=5.3.9", "guzzlehttp/guzzle": "^3.8" }, -php code (Digest is a type so pick different type if you need to, i have to include api server for authentication in this paragraph, some does not need to authenticate. If you use json you will need to replace any text ''xml'' with ''json'' and the data below should be a json string too): $client = new Client(''https://api.yourbaseapiserver.com/incidents.xml'', array(''version'' => ''v1.3'', ''request.options'' => array(''headers'' => array(''Accept'' => ''application/vnd.yourbaseapiserver.v1.1+xml'', ''Content-Type'' => ''text/xml''), ''auth'' => array(''[email protected]'', ''password'', ''Digest''),)));

$url = "https://api.yourbaseapiserver.com/incidents.xml"; $data = ''<incident> <name>Incident Title2a</name> <priority>Medium</priority> <requester><email>[email protected]</email></requester> <description>description2a</description> </incident>'';

$request = $client->post($url, array(''content-type'' => ''application/xml'',)); $request->setBody($data); #set body! this is body of request object and not a body field in the header section so don''t be confused. $response = $request->send(); #you must do send() method! echo $response->getBody(); #you should see the response body from the server on success die;

--- Solución para * Guzzle 6 * --- -package que necesita:

"require": { "php" : ">=5.5.0", "guzzlehttp/guzzle": "~6.0" }, $client = new Client([ // Base URI is used with relative requests ''base_uri'' => ''https://api.compay.com/'', // You can set any number of default request options. ''timeout'' => 3.0, ''auth'' => array(''[email protected]'', ''dsfddfdfpassword'', ''Digest''), ''headers'' => array(''Accept'' => ''application/vnd.comay.v1.1+xml'', ''Content-Type'' => ''text/xml''), ]); $url = "https://api.compay.com/cases.xml"; $data string variable is defined same as above. // Provide the body as a string. $r = $client->request(''POST'', $url, [ ''body'' => $data ]); echo $r->getBody(); die;


Esto funcionó para mí (usando Guzzle 6)

$client = new Client(); $result = $client->post(''http://api.example.com'', [ ''json'' => [ ''value_1'' => ''number1'', ''Value_group'' => array("value_2" => "number2", "value_3" => "number3") ] ]); echo($result->getBody()->getContents());


Esto funciona para mí con Guzzle 6.2:

$gClient = new /GuzzleHttp/Client([''base_uri'' => ''www.foo.bar'']); $res = $gClient->post(''ws/endpoint'', array( ''headers''=>array(''Content-Type''=>''application/json''), ''json''=>array(''someData''=>''xxxxx'',''moreData''=>''zzzzzzz'') ) );

De acuerdo con la documentación guzzle hacer el json_encode


La forma simple y básica (guzzle6):

$client = new Client([ ''headers'' => [ ''Content-Type'' => ''application/json'' ] ]); $response = $client->post(''http://api.com/CheckItOutNow'', [''body'' => json_encode( [ ''hello'' => ''World'' ] )] );

Para obtener el código de estado de respuesta y el contenido del cuerpo, hice esto:

echo ''<pre>'' . var_export($response->getStatusCode(), true) . ''</pre>''; echo ''<pre>'' . var_export($response->getBody()->getContents(), true) . ''</pre>'';


Para Guzzle <= 4 :

Es una solicitud de entrada sin procesar, por lo que poner el JSON en el cuerpo resolvió el problema

$request = $this->client->post($url,array( ''content-type'' => ''application/json'' ),array()); $request->setBody($data); #set body! $response = $request->send(); return $response;


Para Guzzle 5 y 6 lo haces así:

use GuzzleHttp/Client; $client = new Client(); $response = $client->post(''url'', [ GuzzleHttp/RequestOptions::JSON => [''foo'' => ''bar''] ]);

Docs


Por encima de las respuestas no funcionó para mí de alguna manera. Pero esto funciona bien para mí.

$client = new Client('''' . $appUrl[''scheme''] . ''://'' . $appUrl[''host''] . '''' . $appUrl[''path'']); $request = $client->post($base_url, array(''content-type'' => ''application/json''), json_encode($appUrl[''query'']));


Se puede hacer que la respuesta de @ user3379466 funcione estableciendo $data siguiente manera:

$data = "{''some_key'' : ''some_value''}";

Lo que nuestro proyecto necesitaba era insertar una variable en una matriz dentro de la cadena json, lo cual hice de la siguiente manera (en caso de que esto ayude a alguien):

$data = "{/"collection/" : [$existing_variable]}";

Entonces, con $existing_variable , digamos, 90210, obtienes:

echo $data; //{"collection" : [90210]}

También vale la pena señalar que es posible que también desee establecer ''Accept'' => ''application/json'' también en caso de que el punto final que está tratando se preocupa por ese tipo de cosas.


Simplemente usa esto, funcionará

$auth = base64_encode(''user:''.config(''mailchimp.api_key'')); //API URL $urll = "https://".config(''mailchimp.data_center'').".api.mailchimp.com/3.0/batches"; //API authentication Header $headers = array( ''Accept'' => ''application/json'', ''Authorization'' => ''Basic ''.$auth ); $client = new Client(); $req_Memeber = new Request(''POST'', $urll, $headers, $userlist); // promise $promise = $client->sendAsync($req_Memeber)->then(function ($res){ echo "Synched"; }); $promise->wait();


$client = new /GuzzleHttp/Client(); $body[''grant_type''] = "client_credentials"; $body[''client_id''] = $this->client_id; $body[''client_secret''] = $this->client_secret; $res = $client->post($url, [ ''body'' => json_encode($body) ]); $code = $res->getStatusCode(); $result = $res->json();