"Unable to parse URL" exception after SOAP request
Solution 1
Your resulting request is OK (equivalent to expected request from documentation). Problem is there is no endpoint address specified in wsdl http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL
. So SoapClient does not know URL where to post the request and you get error Unable to parse URL
. You have to specify endpoint URL manually in code. For SoapClient this should work:
$client = new SoapClient('http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL',array("trace"=>1));
$client->__setLocation('http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc');
Check this post also.
Solution 2
Request was successfully processed.
try {
if(setEndpoint('changeEndpoint')){
$newLocation = $client->__setLocation(setEndpoint(' https://wsbeta.fedex.com:443/web-services')); // Please set url fedex email response
}
/* echo "<pre>";
Print_r($request); */
$response = $client ->track($request);
}
christophrus
I'm a retired system administrator & full-stack webdeveloper and now a hobbyist content creator on Facebook, Twitter, Twitch, Instagram, TikTok, Youtube, Vimeo etc.
Updated on June 23, 2022Comments
-
christophrus almost 2 years
I'm trying to use a soap service with php, but it seems that the request format that php creates couldn't be interpreted by the service. Simple example I have so far:
ini_set("soap.wsdl_cache_enabled", "0"); $client = new SoapClient('http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL',array("trace"=>1)); try { $response = $client->GetWebservicesVersion(); } catch(Exception $e){ print_r($e); }
Output:
SoapFault Object ( [message:protected] => Unable to parse URL [string:Exception:private] => [code:protected] => 0 [file:protected] => /var/www/test.php [line:protected] => 6 [trace:Exception:private] => Array ( [0] => Array ( [function] => __doRequest [class] => SoapClient [type] => -> [args] => Array ( [0] => <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webservices.hotel.de/V2_8/"><SOAP-ENV:Body><ns1:GetWebservicesVersion/></SOAP-ENV:Body></SOAP-ENV:Envelope> [1] => [2] => http://webservices.hotel.de/V2_8/IBaseService/GetWebservicesVersion [3] => 1 [4] => 0 ) ) [1] => Array ( [file] => /var/www/test.php [line] => 6 [function] => __call [class] => SoapClient [type] => -> [args] => Array ( [0] => GetWebservicesVersion [1] => Array ( ) ) ) [2] => Array ( [file] => /var/www/test.php [line] => 6 [function] => GetWebservicesVersion [class] => SoapClient [type] => -> [args] => Array ( ) ) ) [previous:Exception:private] => [faultstring] => Unable to parse URL [faultcode] => HTTP )
The resulting request xml is:
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webservices.hotel.de/V2_8/"> <SOAP-ENV:Body> <ns1:GetWebservicesVersion /> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
But as of the documentation of the webservice, it is expecting:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <GetWebservicesVersion xmlns="http://webservices.hotel.de/V2_8/"/> </soap:Body> </soap:Envelope>
Is there a way to get the request xml to the expected format?