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:29
Avg. Score:4.4 ± 0.9
Reproduced:26 of 27 (96.3%)
Same Version:4 (15.4%)
Same OS:18 (69.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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
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

Pull Requests

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-2024 The PHP Group
All rights reserved.
Last updated: Sun Oct 27 16:01:27 2024 UTC