我嘗試使用.net WebAPI和PHP。沒有錯誤時一切正常。但是,當WebApi出現錯誤(比如驗證POST數據失敗)時,我很容易得到響應頭,但我無法找到如何獲取響應內容,以便我可以讀取導致錯誤的原因。如何獲取php file_get_contents()錯誤響應內容
是否有人有想法如何得到它或者是不可能的?
WebAPI的testController上有test()動作,它需要id和text作爲請求的內容,否則它會返回HTTP/1.1 400 Bad Request,並告知原因。
我使用Fiddler來測試的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" : '',}
的迴應是:
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}}
所以它告訴在內容 「文本字段是必需的。」用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
{
...
}
所以我從$ http_response_header得到響應報頭數據,但我沒有找到任何方式得到的迴應內容我看到提琴手。
是否有人有想法如何得到它或者是不可能的?
最後一個尖捲曲是不正確的答案,P
編輯:也許這是值得一提的是在$ http_response_header在這種情況下,當($響應===假):
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 –
你已經添加到流選項的'ignore_errors'選項應該照顧這個。你沒有運行一個非常老的PHP版本嗎?如在5.2.10之前? – iainn
我在php 5.5上運行(對不起,答案花了很長時間,我想回來後,但我忘了) –