我有一个 PHP 脚本尝试连接到 WSDL。
我需要允许自签名并提供基本的身份验证详细信息。
使用 SOAP UI,当我连接到 WSDL 时,系统会提示我输入用户名/密码。
我得到了这个工作。
我还发现每个请求还需要基本身份验证(因此在请求屏幕上,我必须选择“身份验证”,然后选择“基本”,输入与提示中使用的相同的凭据)。
如何在 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 周围,得到了相同的结果。
有什么建议么??
来自Manual https://www.php.net/manual/en/soapclient.soapclient.phpSoapclient 支持 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时,它会抛出这个错误
例外:未经授权
我也尝试过将身份验证放入网址中,例如
$wsdl = "http://admin:admin@example/services/Service?wsdl";
但它也不起作用。
最后我通过添加解决了它authentication
到选项。手册上说authentication
默认值是基本身份验证,但只有当我明确设置它时,它才能工作。
$option = array(
"trace"=>1,
"login"=>"admin",
"password"=>"admin",
"authentication"=>SOAP_AUTHENTICATION_BASIC
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)