J'essaie de consommer .net WebAPI avec PHP. Tout fonctionne bien quand il n'y a pas d'erreur. Mais quand il y a une erreur dans WebApi (disons que la validation des données POST échoue) j'obtiens l'en-tête de réponse facilement mais je ne peux pas trouver comment obtenir le contenu de la réponse afin que je puisse lire ce qui a causé l'erreur.Comment obtenir php file_get_contents() error response content
Est-ce que quelqu'un a une idée de comment l'obtenir ou est-ce impossible?
Il y a une action test() sur testController de WebAPI qui nécessite l'id et le texte comme contenu de la requête ou il retournera HTTP/1.1 400 Bad Request avec un contenu indiquant la raison.
Je Fiddler pour tester la WebAPI:
POST http://localhost:56018/api/test/test
User-Agent: Fiddler
Content-Type: application/json
Host: localhost:56018
Content-Length: 32
Content: {"id": 5,"text" : '',}
La réponse est:
HTTP/1.1 400 Bad Request
...
Content-Length: 304
{"args.Text":{"_errors":[{"<Exception>k__BackingField":null,"<ErrorMessage>k__BackingField":"The Text field is required."}],"<Value>k__BackingField":null},"Text":{"_errors":[{"<Exception>k__BackingField":null,"<ErrorMessage>k__BackingField":"The Text field is required."}],"<Value>k__BackingField":null}}
Il est dit dans le contenu que "Le champ de texte est nécessaire."
même fait avec php:
$opts = array('http' =>
[
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query(['id' => 1, 'text' => '']),
'ignore_errors' => true,
]
);
$context = stream_context_create($opts);
$response = file_get_contents('http://localhost:56018/api/test/test', false, $context);
if($response === false)
{
echo json_encode($http_response_header);
die;
}
else
{
...
}
J'obtenir les données d'en-tête de réponse de http_response_header $, mais je ne trouve aucun moyen d'obtenir le contenu de la réponse que je vois avec Fiddler.
Est-ce que quelqu'un a une idée de comment l'obtenir ou est-ce impossible?
Et enfin une astuce cURL n'est pas bonne réponse; P
Edit: Peut-être qu'il vaut la peine de mentionner ce qui est dans http_response_header de $ dans ce cas quand (réponse de $ === false):
array (
0 => 'HTTP/1.1 400 Bad Request',
1 => 'Cache-Control: no-cache',
2 => 'Pragma: no-cache',
3 => 'Content-Type: application/json; charset=utf-8',
4 => 'Expires: -1',
5 => 'Server: Microsoft-IIS/10.0',
6 => 'X-AspNet-Version: 4.0.30319',
7 => 'X-SourceFiles: =?UTF-8?B?QzpcZG90TmV0NDBcR2FsbGUyV2ViQXBpXEdhbGxlMldlYkFwaVxhcGlcZ2FsbGUyXFRlc3Q=?=',
8 => 'X-Powered-By: ASP.NET',
9 => 'Date: Wed, 01 Jun 2016 06:33:11 GMT',
10 => 'Connection: close',
11 => 'Content-Length: 304',
)
http://php.net/stream_get_meta_data –
L'option 'ignore_errors' que vous avez ajoutée aux options de flux devrait prendre soin de cela. Vous n'utilisez pas une très ancienne version de PHP, n'est-ce pas? Comme dans, plus de 5.2.10? – iainn
Je cours sur PHP 5.5 (désolé la réponse a pris longtemps.J'étais supposé revenir après mais j'ai oublié) –