2017-06-05 38 views
0

我試圖通過調用file_get_contents函數獲得完整的HTTP答案。我正在執行HTTP POST調用,將憑據登錄到我的網站,處理一些工作,然後將HTTP答覆返回給調用者。
當憑證都不好,我送HTTP 403返回代碼,與消息如下(原始HTTP響應如圖了SoapUI):file_get_contents - 獲取真正完整的HTTP答案(不只是標題)

HTTP/1.1 403 Forbidden 
Server: Apache-Coyote/1.1 
X-UA-Compatible: IE=edge 
Pragma: no-cache 
Cache-Control: no-cache 
Expires: Mon, 05 Jun 2017 09:02:13 GMT 
Content-Type: text/plain;charset=utf-8 
Content-Length: 515 
Date: Mon, 05 Jun 2017 09:02:13 GMT 

L'authentification user/password n'est pas autorisée pour le login 'sebastien' depuis l'adresse '127.0.0.1'. 

我怎麼能在底部得到的消息在PHP中調用file_get_contents之後?消息不在標題中,所以$ http_response_header將不起作用。有沒有辦法做到這一點?

+0

「服務器:Apache-Coyote .... X-UA兼容:IE =邊緣」 - 這裏很奇怪。 – symcbean

回答

0

甲HTTP響應身體應該從標頭由一個空行被分離:https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html

然後身體應該作爲file_get_contents調用的結果。

+0

嗯身體是從標題分開(它沒有正確顯示在我的第一篇文章,我編輯它),但由於HTTP響應代碼是403,身體不返回file_get_contents,這是一個布爾(假)在這種情況下不是字符串。 – Sooron

1

您可以創建一個HTTP stream context用的file_get_contents使用(),然後調用stream_get_meta_data()但我個人只想用捲曲帶CURLOPT_HEADER=true

注意,因爲該服務返回一個403而不是401,那麼你會需要cookies(如果可能的話)進行身份驗證。爲此你需要捲曲。

+0

是的。使用捲曲。或者更好的是,使用Guzzle。捲曲可能有點痛苦,但Guzzle使它變得容易(就像使用'file_get_contents()'一樣簡單)。還要注意,PHP可以配置爲阻止'file_get_contents()'在http上運行;如果你打算讓你的代碼在你不控制系統配置的系統上運行,那麼你必須改用Curl或Guzzle。 – Simba

相關問題