我正在使用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