Guzzlehttp - Comment obtenir le corps d'une réponse de Bouffer 6?
Je suis en train d'écrire un wrapper autour d'une api de mon entreprise est en développement. C'est reposant, et l'utilisation de Facteur, je peux envoyer une requête post à un point de terminaison comme http://subdomain.dev.myapi.com/api/v1/auth/
avec un nom d'utilisateur et le mot de passe que les données POST et je me suis donné un jeton. Tout fonctionne comme prévu. Maintenant, quand j'essaie d'en faire de même à partir de PHP, j'obtiens en retour un GuzzleHttp\Psr7\Response
objet, mais n'arrive pas à trouver le jeton n'importe où à l'intérieur comme je l'ai fait avec le Facteur demande.
Le code ressemble à ceci:
$client = new Client(['base_uri' => 'http://companysub.dev.myapi.com/']);
$response = $client->post('api/v1/auth/', [
'form_params' => [
'username' => $user,
'password' => $password
]
]);
var_dump($response); //or $resonse->getBody(), etc...
La sortie du code ci-dessus ressemble à quelque chose comme (attention, à l'arrivée de mur de texte):
object(guzzlehttp\psr7\response)#36 (6) {
["reasonphrase":"guzzlehttp\psr7\response":private]=>
string(2) "ok"
["statuscode":"guzzlehttp\psr7\response":private]=>
int(200)
["headers":"guzzlehttp\psr7\response":private]=>
array(9) {
["connection"]=>
array(1) {
[0]=>
string(10) "keep-alive"
}
["server"]=>
array(1) {
[0]=>
string(15) "gunicorn/19.3.0"
}
["date"]=>
array(1) {
[0]=>
string(29) "sat, 30 may 2015 17:22:41 gmt"
}
["transfer-encoding"]=>
array(1) {
[0]=>
string(7) "chunked"
}
["content-type"]=>
array(1) {
[0]=>
string(16) "application/json"
}
["allow"]=>
array(1) {
[0]=>
string(13) "post, options"
}
["x-frame-options"]=>
array(1) {
[0]=>
string(10) "sameorigin"
}
["vary"]=>
array(1) {
[0]=>
string(12) "cookie, host"
}
["via"]=>
array(1) {
[0]=>
string(9) "1.1 vegur"
}
}
["headerlines":"guzzlehttp\psr7\response":private]=>
array(9) {
["connection"]=>
array(1) {
[0]=>
string(10) "keep-alive"
}
["server"]=>
array(1) {
[0]=>
string(15) "gunicorn/19.3.0"
}
["date"]=>
array(1) {
[0]=>
string(29) "sat, 30 may 2015 17:22:41 gmt"
}
["transfer-encoding"]=>
array(1) {
[0]=>
string(7) "chunked"
}
["content-type"]=>
array(1) {
[0]=>
string(16) "application/json"
}
["allow"]=>
array(1) {
[0]=>
string(13) "post, options"
}
["x-frame-options"]=>
array(1) {
[0]=>
string(10) "sameorigin"
}
["vary"]=>
array(1) {
[0]=>
string(12) "cookie, host"
}
["via"]=>
array(1) {
[0]=>
string(9) "1.1 vegur"
}
}
["protocol":"guzzlehttp\psr7\response":private]=>
string(3) "1.1"
["stream":"guzzlehttp\psr7\response":private]=>
object(guzzlehttp\psr7\stream)#27 (7) {
["stream":"guzzlehttp\psr7\stream":private]=>
resource(40) of type (stream)
["size":"guzzlehttp\psr7\stream":private]=>
null
["seekable":"guzzlehttp\psr7\stream":private]=>
bool(true)
["readable":"guzzlehttp\psr7\stream":private]=>
bool(true)
["writable":"guzzlehttp\psr7\stream":private]=>
bool(true)
["uri":"guzzlehttp\psr7\stream":private]=>
string(10) "php://temp"
["custommetadata":"guzzlehttp\psr7\stream":private]=>
array(0) {
}
}
}
La sortie de Facteur était quelque chose comme:
{
"data" : {
"token" "fasdfasf-asfasdfasdf-sfasfasf"
}
}
Est clair que je suis absent quelque chose sur le travail avec la réponse des objets en Bouffer. Le Gave de réponse indique un code d'état 200 sur la demande, donc je ne suis pas sûr exactement ce que je dois faire pour récupérer les données renvoyées.
$response->getBody()->getContents()
ne fonctionne pas?
Vous devez vous connecter pour publier un commentaire.
Bouffer implémente PSR-7. Cela signifie que, par défaut, stocker le corps d'un message dans un Flux qui utilise PHP temp ruisseaux. Pour récupérer toutes les données, vous pouvez utiliser l'opérateur de coulée:
Vous pouvez aussi le faire avec
La différence entre les deux approches est que
getContents
renvoie le reste du contenu, de sorte qu'un deuxième appel renvoie rien, sauf si vous chercher de la position du flux àrewind
ouseek
.Au lieu de cela, l'usage de PHP chaîne d'activités de fonte, il lit toutes les données dans le flux du début jusqu'à la fin est atteinte.
Documentation: http://docs.guzzlephp.org/en/latest/psr7.html#responses
"you can pass true to this method [getBody()] to retrieve the body as a string."
. Cela ne semble pas fonctionner pour moi, en utilisant Bouffer 6, mais la conversion en chaîne ou en utilisant getContents() fonctionne.json_decode($response, true);
cette retournera un tableau.$response->getBody()->getContents();
revient avec un en-tête HTTP dans la matrice de la forme. Quelqu'un sait comment résoudre ce problème? Plus sur ceci: stackoverflow.com/questions/56004396/...