Reputation: 1454
I'm trying to create a soap connection to Magento's web services, however I'm getting an error when I try and create an instance of the soap client class. I can view the wsdl file in firefox without problems and I can watch php make the request for the wsdl in apaches logs but it still fails. Nusoap can connect.
$proxy = new SoapClient('someaddress?wsdl');
The error is
<b>Fatal error</b>: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php:29
Stack trace:
[internal function]: SoapClient->__doRequest('<?xml version="...', 'http://cornishw...', 'urn:Mage_Api_Mo...', 1, 0)
[internal function]: SoapClient->__call('call', Array)
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29): SoapClient->call(NULL, 'catalog_categor...', 5, 'giftshop')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(586): include('/home/sites/cor...')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(228): MY_Loader->_ci_load(Array, '')
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44): MY_Loader->view('contentpage_tem...', false, true)
[internal function]: Contentpage->index()
/home/sites/xxx in <b>/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php</b> on line <b>29</b>
Thanks
Upvotes: 27
Views: 106030
Reputation: 990
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.
//set the Headers of Soap Client.
$client = new SoapClient($wsdlUrl, array(
'trace' => true,
'keep_alive' => true,
'connection_timeout' => 5000,
'cache_wsdl' => WSDL_CACHE_NONE,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
));
Hope it helps.
Good luck.
Upvotes: 1
Reputation: 7550
I am not about your PHP configuration but until PHP 5.2.6 , PHP does have some problem with SOAP client :
Bug #41983 - Error Fetching http headers
Upvotes: 2
Reputation: 352
Please update your php.ini with
default_socket_timeout = 120
You can create your own php.ini if php is installed a CGI instead of a Apache module
Upvotes: 0
Reputation: 8222
I faced the same problem.
I was running It as CLI. So PHP was always running and it had to make soap call again and again after some interval.
The mistake I did was using singleton pattern for this. I thought use of singleton will cause performance boost but inturn I got
Error Fetching http headers in ...
I fixed it by creating new saop object for each call.
Upvotes: 4
Reputation: 351
If this is a Magento related problem, you should turn off automatic re-indexing as this could be causing the socket to timeout (or expire). You can turn it back on once the script has finished its tasks. Increasing the default socket timeout in php.ini is also a good idea.
Upvotes: 1
Reputation: 61
This error can appear on the client if there is a problem on the server side. For example, if the SOAP server is a PHP script with a parse error, the client will fail with this message.
If you are in control of the server, tail your Apache error_log on the machine that hosts the SOAP server. On CentOS you will find this in /var/log/httpd/error_log, so the command is:
tail -f /var/log/httpd/error_log
Now refresh the client and watch for the error message. Any PHP errors with the server script will be shown.
Hope that helps someone.
Upvotes: 6
Reputation: 381
There is an issue in php version less than 5.2.6. You may need to upgrade the version of php.
Upvotes: 0
Reputation: 339
In my apache error log, I saw:
[Tue Feb 16 14:55:02 2010] [notice] child pid 9985 exit signal File size limit exceeded (25)
So I, removed all the contents of my largest log file 2.1GB /var/log/system.log. Now everything works.
Upvotes: 0
Reputation: 6764
Did you try adding
'trace'=>1,
to SoapClient creation parameters and then:
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
to see what is going on?
Upvotes: 13