"Unable to parse URL" exception after SOAP request

13,371

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);
}
Share:
13,371
christophrus
Author by

christophrus

I'm a retired system administrator &amp; full-stack webdeveloper and now a hobbyist content creator on Facebook, Twitter, Twitch, Instagram, TikTok, Youtube, Vimeo etc.

Updated on June 23, 2022

Comments

  • christophrus
    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?