I'm trying to invoke a WS over https on a remote host:remote port and I get:
Error fetching http headers
using PHP5 SoapClient; I can get the list of functions by doing $client->__getFunctions()
but when i call $client->myFunction(...)
i always get this error.
I've googled and found to increase default_socket_timeout in php.ini but it did not work.
Can anyone suggest me a solution?
EDIT: here is the code:
$wsdl="myWSDL";
$client = new SoapClient($wsdl,array('connection_timeout'=>5,'trace'=>true,'soap_version'=>SOAP_1_2));
var_dump($client->__getFunctions());
try {
$response=$client->myFunction("1","2","3");
} catch (SoapFault $fault) {
var_dump($fault);
}
}
...always in fault.
I just wanted to add, for completeness sake, that similar to Manachi I received this message because the client certificate I was using required a passphrase and I accidentally had an extra character at the end of the passphrase. This post is just to offer up another suggestion for what to look into. If the host requires the use of a client certificate (via local_cert parameter) make sure you provide the correct path to the cert and the correct passphrase (if one is needed). If you don't, it is very likely you will see this same error message.
Another possible cause of this error could be some OpenSSL operations leaving not cleared errors. Put this piece of code before the SOAP request to clear them:
Just wanted to share the solution to this problem in my specific situation (I had identical symptoms). In my scenario it turned out to be that the ssl certificate provided by the web service was no longer trusted. It actually turned out to be due to a new firewall that the client had installed which was interfering with the SOAP request, but the end result was that the certificate was not being correctly served/trusted.
It was a bit difficult to track down because the SoapClient call (even with trace=1) doesn't give very helpful feedback.
I was able to prove the untrusted certificate by using:
I know this won't be the answer to everyone's problem, but hopefully it helps someone. Either way I think it's important to realise that the cause of this error (faultcode: "HTTP" faultstring: "Error Fetching http headers") is usually going to be a network/socket/protocol/communication issue rather than simply "not allowing enough time for the request". I can't imagine expanding the default_socket_timeout value is going to resolve this problem very often, and even if it does, surely it would be better to resolve the issue of WHY it is so slow in the first place.
Please check for the response HTTP-Header. In my case, the following header was set on the API-Site:
It seems like the PHP SoapClient can't deal with that option. As a result, the response body was empty, but content-length in the response-header has been set correctly.
Remove that line or change it to "close" solved my issue.
I suppose it's too late, but I have the same problem. I try the socket timeout but it doesn't work. My problem was that the client and the server where in the same physical server. With the client code working in the same physical server , I get this error, but, with the same client code moved to my localhost, requesting the server, (client and server was executed in two differents mechines) all works fine.
Maybe that can help someone else!
I faced same problem and tried all the above solution. Sadly nothing work.
This whole game of headers that we are passing. I solved my problem with adding the compression header property. This actually require when you are expecting response in gzip compressed format.
Hope it helps.
Good luck.