带有BasicAuth的PHP SoapClient

时间:2015-08-19 14:36:01

标签: php soap wsdl soap-client

我有一个PHP脚本试图连接到WSDL。 我需要允许自签名并提供基本的身份验证详细信息。 使用SOAP UI,当我连接到WSDL时,系统会提示您输入用户名/密码。 我得到了这个工作。

我还发现每个请求还需要基本身份验证(因此在请求屏幕上,我必须选择Auth,然后选择基本身份,输入与我在提示中使用的凭据相同的凭据)。

如何在PHP中执行此身份验证 正如我所说,我可以连接,而不是问题,如果我尝试提出请求,我似乎会终止服务或超时

<?php
$context = stream_context_create(array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
 ));

$data = array(
    'columnA' => 'dataA',
    'columnB' => 'dataB',
    'columnC' => 'dataC');

$url = 'https://111.111.111.111:1234/dir/file';
$login = 'username';
$pwd = 'password';


$client = new soapClient(null, array(
     'location' => $url,
     'uri' => '',
     'login' => $login,
     'password' => $pwd,
     'stream_context' => $context
));
echo "\n\r---connected---\n\r";
$result = $client ->requestName($data);

print_r($result);
?>

我的输出是 --- ---连接

然后似乎挂了。 我尝试将它包裹在try catch中,我得到了相同的结果。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

Manual soapclient支持http基本身份验证。

对于HTTP身份验证,登录名和密码选项可用于 提供凭证。用于通过代理建立HTTP连接 服务器,选项proxy_host,proxy_port,proxy_login和 proxy_password也可用。对于HTTPS客户端证书 身份验证使用local_cert和密码短语选项。一个 身份验证选项中可以提供身份验证。的 认证方法可以是SOAP_AUTHENTICATION_BASIC (默认)或SOAP_AUTHENTICATION_DIGEST。

$wsdl = "http://example/services/Service?wsdl";
$option = array(
    "trace"=>1,
    "login"=>"admin",
    "password"=>"admin",
);
$client = new SoapClient($wsdl,$option);

但是当我启动soapclient时,它将抛出此错误

例外:未经授权

我也试图将auth放在url中,例如

$wsdl = "http://admin:admin@example/services/Service?wsdl";

但是它也不起作用。

最后,我通过在选项中添加authentication来解决了这个问题。手册中说authentication的默认值是基本身份验证,但是只有当我明确设置它时,它才能起作用。

$option = array(
    "trace"=>1,
    "login"=>"admin",
    "password"=>"admin",
    "authentication"=>SOAP_AUTHENTICATION_BASIC
);

答案 1 :(得分:0)

尝试在您正在使用的网址内对您的用户名和密码进行网址编码:

$url = 'http://'.urlencode('yourLogin').':'.urlencode('yourPassword').'@111.111.111.111:1234/dir/file';

此外,我还没有看到您在代码示例中使用了wsdl。您始终可以在本地下载wsdl的副本,然后引用该本地副本。您可以随心所欲地下载wsdl(使用php,curl,手动)。