php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #61463 cant import schema when using https soapservice
Submitted: 2012-03-21 12:33 UTC Modified: -
Votes:25
Avg. Score:4.4 ± 0.9
Reproduced:22 of 23 (95.7%)
Same Version:4 (18.2%)
Same OS:15 (68.2%)
From: markus dot rietzler at rzf dot fin-nrw dot de Assigned:
Status: Open Package: SOAP related
PHP Version: 5.3.10 OS: linux
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: markus dot rietzler at rzf dot fin-nrw dot de
New email:
PHP Version: OS:

 

 [2012-03-21 12:33 UTC] markus dot rietzler at rzf dot fin-nrw dot de
Description:
------------
here is my problem: i want to access a soap-service via https://connect.example.com/portal/portal?wsdl 

with php 5.3.3 my script worked, with 5.3.10 it does not work anymore.

in the xml returned:

<service name="PortalService">
<port name="PortalPort" binding="tns:PortalPortBinding">
<soap:address location="http://connect.example.com:80/portal/portal"/>
</port>
</service>
</definitions>

so there is a http and not a https location. is this wrong?
i am not sure, whether this should work in general (using https but with a http-location). we use a soapservice from an extern service provider which requires us to use https for the calls.

in my php script i used

$client = new SoapClient('https://connect.example.com/portal/portal?wsdl',
        array(  'proxy_host' => 'myproxy',
                'proxy_port' => '8080',
                'trace' => 1,
                'exceptions' => 1,
                // actual use https-endpoint
                'location' => 'https://connect.juris.de/jportal/ws/fvportalnrw'
));


with php 5.3.3 i could create the soapclient and do my requests. the wsdl is downloaded and cached in /tmp. with php 5.3.10 i get:

PHP Fatal error:  SOAP-ERROR: Parsing Schema: can't import schema from 'http://connect.example.com:80/portal/portal?xsd=1' in ./t.php on line 9
PHP Fatal error:  Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing Schema: can't import schema from 'http://connect.example.com:80/portal/portal?xsd=1' in ./t2.php:9

so the schema could not be downloaded! 

what's wrong here? was it a bug in 5.3.3 - and it should not have worked there - or is it a bug in 5.3.10 (same for 5.3.8). 

if i used php 5.3.3 to access the service, a wsdl is cached in /tmp and then i can call the script with php 5.3.10.




Test script:
---------------
<?php
$client = new SoapClient('https://connect.example.com/portal/portal?wsdl',
        array(  'proxy_host' => 'myproxy',
                'proxy_port' => '8080',
                'trace' => 1,
                'exceptions' => 1,
                // actual use https-endpoint
                'location' => 'https://connect.juris.de/jportal/ws/fvportalnrw'
));
print_r($client);
?>

Expected result:
----------------
SoapClient Object
(
    [_proxy_host] => myproxy
    [_proxy_port] => 8080
    [trace] => 1
    [_soap_version] => 1
    [sdl] => Resource id #9
)


Actual result:
--------------
PHP Fatal error:  SOAP-ERROR: Parsing Schema: can't import schema from 'http://connect.example.com:80/portal/portal?xsd=1' in ./t.php on line 9
PHP Fatal error:  Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing Schema: can't import schema from 'http://connect.example.com:80/portal/portal?xsd=1' in ./t2.php:9

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-03-29 00:54 UTC] jingshangmingzi at gmail dot com
The proxy_port parameter has to be an integer.
I think you'll have to use 'proxy_port' => 8080
 [2012-03-29 08:24 UTC] markus dot rietzler at rzf dot fin-nrw dot de
nope, proxy_port makes no difference. i wonder whether it is ok to have a mix of https and http in schema. maybe a misconfiguration of the service provider for this soap service.
but: it has worked with php 5.3.3 and with 5.3.10 it don't work anymore
 [2012-04-19 14:48 UTC] benoit dot chenu at gmail dot com
I have the same problem on PHP 5.3.8. The same code works on PHP 5.2.5 for me.
I don't use proxy but I use HTTP authentication, ex :

$client = new SoapClient(
	'https://connect.example.com/portal/portal?wsdl',
	array(
		'login' => 'axis',
		'password' => 'axis'
	)
);

The wsdl import an xsd like this :

<xsd:import namespace="http://xxx/" 
schemaLocation="https://connect.example.com:443/portal/portal?xsd=1"/>

This cause the same error :

Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing Schema: can't import 
schema from 'https://connect.example.com:443/portal/portal?xsd=1'
 [2012-04-19 15:41 UTC] benoit dot chenu at gmail dot com
Hi,

I solve the problem by disabling HTTP authentication. It seems that the soap 
library doesn't use connexion options when requesting external ressources like 
the xsd.

So it's simple to reproduce :

- Create an wsdl which call an xsd
- Call the wsdl in https with options (proxy or http authentication)

Ben
 [2012-04-19 16:33 UTC] benoit dot chenu at gmail dot com
I didn't test but the authentication problem seems to be solved in 5.4.0 :

"Fixed basic HTTP authentication for WSDL sub requests."

If it's the case, I hope it will also be done in the next 5.3.11 release.

In my case, I've "solved" the problem by commenting this lines in 
ext/soap/php_schema.c (PHP 5.3.8) :

//sdl_set_uri_credentials(ctx, (char*)location TSRMLS_CC);
doc = soap_xmlParseFile((char*)location TSRMLS_CC);
//sdl_restore_uri_credentials(ctx TSRMLS_CC);

I suppose that the proxy and http auth problem are not linked.
 [2012-04-20 08:56 UTC] markus dot rietzler at rzf dot fin-nrw dot de
tried it with php 5.4.0. same error. not able to load the schema.

ok: we have to use http-auth to fetch data, also the schema can be loaded without auth.

my question is: it is ok to access the uri with https (ssl secured) 

$client = new SoapClient('https://connect.example.com/portal/portal?wsdl')

and then get an answer with

<service name="PortalService">
<port name="PortalPort" binding="tns:PortalPortBinding">
<soap:address location="http://connect.example.com:80/portal/portal"/>
</port>
</service>
</definitions>

so the soap:address points to http (non ssl!) could this be the error?
 [2016-10-07 08:29 UTC] tommybravo at hotmail dot com
I think this might have to do with the issue (and solution direction) I explain here:
http://stackoverflow.com/a/39912332/839332
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Sat Sep 21 19:01:26 2019 UTC