Soapserver()调用无法访问WSDL文件



我有一个基于符号的产品,我必须在其中暴露肥皂API。我创建了WSDL文件,该文件在输入用户名和pasword后可从浏览器访问,用于基本HTTP Auth Check。

当我使用SoapClient调用该API并通过标头提供用户名和密码时,它可以访问WSDL并致电Soapserver Endpoint。但是,当Soapserver()呼叫该WSDL链接时,它显示错误。

soapclient():

$client = new SoapClient('http://example.com/soaptest?wsdl', array(
        "exceptions" => 0,
        "trace" => 1,
        'stream_context' => stream_context_create(array(
            'http' => array(
                'header' => "Authorization: Basic " . base64_encode("$username:$password")
            ),
        )),
    ));

soapserver():

ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer($wsdl);    //Here SoapServer not able to access WSDl because of .htaccess
$server->setObject($this->get($class));
ob_start();
$server->handle();
$result = ob_get_clean();
return $result;

我也有一个.htaccess AS:

DirectoryIndex app.php

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]

    RewriteRule ^ %{ENV:BASE}/app.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/# RedirectTemp cannot be used instead
    </IfModule>
</IfModule>
php_value date.timezone UTC
AuthType Basic
AuthName "Login"
AuthUserFile /etc/apache2/config/.htpasswd
Require expr %{REQUEST_URI} !~ m#^/(admin|login|soaptest)#
Require valid-user
#<RequireAll>
 # Require ip 127.0.0.1
#</RequireAll>

因此,在这里,控件转到soapserver()呼叫,但是在尝试访问soapserver()中的WSDL时,它正在显示: -

错误{" 500":"错误:soap-error:解析WSDL:无法从'http://example.com/soaptest?wsdl':无法加载外部实体" http://xplue示例。com/soaptest?wsdl"}

因此,是否可以在soapserver呼叫中提供基本的auth用户名和密码?,因为我认为在寻找WSDL文件时soapserver无法访问该链接。也所有文件都在同一服务器中。并且没有进行外部呼叫

我也尝试了SOAPUI并发生了同样的错误。

.htaccess 中的最后3行有助于解决该问题,但是有更好的方法可以解决此问题吗?

.htaccess是我的项目所必需的,因此无法删除。

您确定Soapserver能够将URL用作WSDL文件吗?它应该是本地文件,而不是遥远的文件。如果有效,则可能是因为PHP可以像使用Fopen包装器一样在本地计算机上加载URL Ressource。请参阅此处的示例:http://php.net/manual/en/soapserver.soapserver.php

相关内容

  • 没有找到相关文章

最新更新