I am using file_get_contents()
to perform a POST to an API service. This is working for most of the queries. However, recently I had a failure in which file_get_contents()
returned HTTP headers in the content!
For the code:
$resp = file_get_contents("http://10.72.18.21:8000",false, $context);
var_dump($resp);
var_dump($http_response_header);
I get the following content and headers every time:
string(114328) "Server: Spark Proxy Server
Content-Length: 114272
{"records":....}
"
array(1) {
[0]=>
string(31) "HTTP/1.0 200 Spark Proxy Server"
}
Notice that inside the $resp
you can see headers (the first two lines) which should normally be parsed in $http_response_header
.
I have also tried two different approaches to do the POST: (a) fopen
+ while
loop and (b) fopen
+ stream_get_contents
. In all three cases the results are the same. The common thing between all three is the stream context which I create using:
$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);
Now, querying the same API with the same code but with a single parameter modified, everything works as expected and the complete headers are:
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"
}
Finally, I have tried the same call that fails with python and cUrl and in both cases the results are correct, so I am pretty sure it is php related issue.
Questions:
- Has anyone seen this behavior before?
- Is there a way to perform the same POST without using
stream_context_create
? - Can it be time related? The example that fails takes up to 1.4 minutes to complete