我正在使用file_get_contents()
執行POST到API服務。這適用於大多數查詢。但是,最近我有一個失敗,其中file_get_contents()
在內容中返回HTTP標頭!file_get_contents返回內容中的HTTP標頭
的代碼:
$resp = file_get_contents("http://10.72.18.21:8000",false, $context);
var_dump($resp);
var_dump($http_response_header);
我碰到下面的內容和標題每次:
string(114328) "Server: Spark Proxy Server
Content-Length: 114272
{"records":....}
"
array(1) {
[0]=>
string(31) "HTTP/1.0 200 Spark Proxy Server"
}
注意裏面的$resp
你可以看到頭(前兩行),它應該正常在$http_response_header
中解析。
我也曾嘗試兩種不同的方法做POST:(一)fopen
+ while
循環和(b)fopen
+ stream_get_contents
。在所有三種情況下,結果都是一樣的。所有這三者之間的共同點是我創建使用該流上下文:
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded;charset=utf-8',
'content' => http_build_query($params)
)
);
$context = stream_context_create($opts);
現在,查詢使用相同的代碼,但與修改一個參數相同的API,一切正常和完整的標題是:
array(3) {
[0]=>
string(31) "HTTP/1.0 200 Spark Proxy Server"
[1]=>
string(26) "Server: Spark Proxy Server"
[2]=>
string(19) "Content-Length: 288"
}
最後,我已經嘗試了與python和cUrl失敗相同的調用,並且在這兩種情況下結果都是正確的,所以我非常確定它是與php相關的問題。
問題:
- 有沒有人見過這種行爲?
- 有沒有辦法在不使用
stream_context_create
的情況下執行相同的POST? - 它可以與時間有關嗎?失敗的例子花費高達1.4分鐘才能完成
'10.72.18.21'是一個專用網絡地址,請與您的技術支持人員覈對,他們最近沒有在混音中的某個地方添加代理服務器,或者更改了一直存在的代理服務器的配置 – RiggsFolly
@RiggsFolly嗨,實際上,IP是一個(自定義)代理服務器:)過濾我的查詢,並反過來使用真正的API(我無法訪問),reo整理結果並將其發回。然而,我已經測試過捲曲和瀏覽器,它的工作原理...所以我不認爲是一個網絡問題 – urban