相关疑难解决方法(0)

使用PHP连接到受WS-Security保护的Web服务

我正在尝试连接到受密码保护且网址为https的Web服务.在脚本发出请求之前,我无法弄清楚如何进行身份验证.它似乎在我定义服务时立即发出请求.例如,如果我投入:

$client = new SoapClient("https://example.com/WSDL/nameofservice",
       array('trace' => 1,)
);
Run Code Online (Sandbox Code Playgroud)

然后在浏览器上访问该站点,我得到:

Fatal error: Uncaught SoapFault exception: 
[WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from
'https://example.com/WSDL/nameofservice' in /path/to/my/script/myscript.php:2 
Stack trace: #0 /path/to/my/script/myscript.php(2): 
SoapClient->SoapClient('https://example...', Array) #1 {main} thrown in 
/path/to/my/script/myscript.php on line 2
Run Code Online (Sandbox Code Playgroud)

如果我尝试将服务定义为Soap服务器,例如:

$server= new SoapServer("https://example.com/WSDL/nameofservice");
Run Code Online (Sandbox Code Playgroud)

我明白了:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>WSDL</faultcode>
<faultstring>
SOAP-ERROR: Parsing WSDL: 
Couldn't load from 'https://example.com/WSDL/nameofservice'
</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

我还没有尝试发送原始请求信封,看看服务器返回什么,但这可能是一种解决方法.但是我希望有人可以告诉我如何使用php内置类来设置它.我尝试将"userName"和"password"添加到数组中,但这并不好.问题是我甚至无法判断我是否到达了远程站点,更不用说它是否拒绝了请求.

php ws-security soap web-services

31
推荐指数
4
解决办法
7万
查看次数

函数执行期间的SOAP客户端超时

我需要使用SOAP从数据库中检索一些数据.我不是一个经验丰富的PHP程序员,这就是我需要一些帮助的原因.提供webservice(WSDL)的公司给了我登录信息和svc和wsdl文件的链接.他们还给了我一个如何连接C#的例子:

var proxy = new ChannelFactory<ServiceReferenceWCF.IWebService2>("custom");
            proxy.Credentials.UserName.UserName = login;
            proxy.Credentials.UserName.Password = pass;
            var result = proxy.CreateChannel();
            var logged_in = result.loggedIn();
Run Code Online (Sandbox Code Playgroud)

这是我的PHP代码:

$wsdl_proto = 'https';
$wsdl_host = 'their_wsdl_host';
$wsdl_host_path = 'their_wsdl_path';
$namespace_proto = 'https';
$namespace_host = 'their_namespace_host';
$namespace_path = 'their_namespace_path';
$location = $namespace_proto.'://'.$namespace_host.$namespace_path;
$wsdl_url = $wsdl_proto.'://'.$wsdl_host.$wsdl_host_path;
$connection = new SoapClient($wsdl_url, array('location' => $location, 'soap_version' => SOAP_1_1, 'connection_timeout'=> 600,
    'proxy_login' => "my_login", 'proxy_password' => "my_password"));
$functions = $connection->__getFunctions();
var_dump($functions);
$logged_in = $connection->loggedIn();
Run Code Online (Sandbox Code Playgroud)

它在loggedIn()函数调用期间挂起.此函数列在$ functions变量中,因此它是有效的.我尝试了服务提供的其他一些功能 - 结果总是一样的:脚本只是冻结了.我的意思是服务没有响应,PHP等待loggedIn()功能完成.超过超时后,我收到一个错误:Error Fetching …

php soap wsdl soap-client

10
推荐指数
1
解决办法
5009
查看次数

标签 统计

php ×2

soap ×2

soap-client ×1

web-services ×1

ws-security ×1

wsdl ×1