我正在尝试向本地打印机端点http://192.168.1.116/WebServices/PrinterService发出SOAP请求。通常,要获取与端点对应的WSDL,您需要在URL的末尾附加?wsdl
,但在本例中,这样做不起作用。
幸运的是,WSDL可以从https://learn.microsoft.com/en-us/windows-hardware/drivers/print/ws-print-v1-1下载,因此我可以从本地文件系统读取它:
$client = new SoapClient(dirname(__FILE__) . '/WebPackage/WSDPrinterService.wsdl', ['trace' => 1]);
$client->SendDocument();
问题是此代码总是错误地输出以下内容:
[29-Dec-2021 14:39:11 America/Chicago] PHP Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /home/neubert/test.php:9
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://localhos...', 'http://schemas....', 1, 0)
#1 /home/neubert/test.php(9): SoapClient->__call('SendDocument', Array)
#2 {main}
thrown in /home/neubert/test.php on line 9
__doRequest
($location
)的第二个参数是“http://localhos ...”。这很可能是本地主机被截断。
我的问题是......我如何才能使驻留在本地文件系统上的WSDL不总是发布到localhost?
我在WebPackage目录中执行了grep -r localhost .
,并将所有这些示例替换为192.168.1.116,但仍然出现错误。
有什么想法吗?
1条答案
按热度按时间20jt8wwn1#
SoapClient将使用WSDL中的地址进行调用。应该有如下内容:
或
XML前缀可能不同,但应该有一个或两个地址。请将此地址替换为希望客户端调用的地址。
另一种尝试方法是为调用设置location:
看看能不能成功。