【问题标题】:Connecting to server getting "Could not connect to host" using PHP and SOAP Ligth (PERL)使用 PHP 和 SOAP Ligth (PERL) 连接到“无法连接到主机”的服务器
【发布时间】:2011-10-19 06:31:33
【问题描述】:

我正在努力让一些 SOAP 请求在请求端使用 SOAP Ligth 和 PHP,在我从中请求信息的服务器上使用 PERL。我以前从未使用过 SOAP。

打印跟踪等时,我尝试连接的 URL 看起来是有线的:“http://192.168.1.101/otrs/rpc.pl”。我想这可能是问题的一部分(但我知道什么......)。这是跟踪:

Fault message: Could not connect to host
Fault code: 0
array(2) {
  [0]=>
  array(4) {
    ["function"]=>
    string(11) "__doRequest"
    ["class"]=>
    string(10) "SoapClient"
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(5) {
      [0]=>
      string(645) "
userpasswordTicketObjectTicketCreateNumber
"
      [1]=>
      string(35) "http://192.168.1.101/otrs/rpc.pl"
      [2]=>
      string(13) "Core#Dispatch"
      [3]=>
      int(1)
      [4]=>
      int(0)
    }
  }
  [1]=>
  array(6) {
    ["file"]=>
    string(54) "/Library/WebServer/Documents/SMICTestProject/index.php"
    ["line"]=>
    int(37)
    ["function"]=>
    string(10) "__soapCall"
    ["class"]=>
    string(10) "SoapClient"
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(2) {
      [0]=>
      string(8) "Dispatch"
      [1]=>
      array(4) {
        [0]=>
        string(8) "user"
        [1]=>
        string(11) "password"
        [2]=>
        string(12) "TicketObject"
        [3]=>
        string(18) "TicketCreateNumber"
      }
    }
  }
}
Fault trace: // Of some reason this ends up after the actual trace
Fault line: 37

下面是产生异常的代码:

    try {
$client = new SoapClient(null, array(

    'location'  => "http://192.168.1.101/otrs/rpc.pl",
    'uri'       => "Core",
    'trace'     => 1,
    'login'     => "user",
    'password'  => "password",
    'style'     => SOAP_RPC,
    'use'       => SOAP_ENCODED
));


$ticketnumber = $client->__soapCall("Dispatch", array("user", "password", "TicketObject", "TicketCreateNumber"));
//Here happens a lot of things, but since this code is never reached I skip including it. 

} catch (SoapFault $fault) {
//trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
echo "Fault message: ".$fault->getMessage()."\n";
echo "Fault code: ".$fault->getCode()."\n";
echo "Fault trace: ".var_dump($fault->getTrace())."\n";
echo "Fault line: ".$fault->getLine()."\n";
echo "Bad SOAP request\n";
echo "REQUEST:\n".$client->__getLastRequest()."\n";
echo "RESPONSE:\n".$client->__getLastResponse()."\n";
echo "</pre>";
exit;
}

有什么问题,我该如何解决?我应该对 URL 进行编码吗...?

我只包含了我认为必要的内容,如果我应该添加一些内容,请告诉我。我可以在这里包含的任何日志中绝对没有任何内容,我觉得这本身很奇怪。

我在服务器端使用 OpenSUSE/Apache,在客户端使用 Mac/Apache/PHP。

提前谢谢你!

【问题讨论】:

  • 在浏览器中打开http://192.168.1.101/otrs/rpc.pl 时看到了什么?为什么会出现这个奇怪的角色?
  • 当我在浏览器中打开它时,我得到:Firefox 找不到服务器 xn--192-0gau00a.168.1.101。我不知道为什么链接看起来像这样,我没有做任何事情来添加那些奇怪的字符。
  • 同样的错误(无法连接到主机)。尝试删除这个奇怪的字符,然后重试。
  • (更新了我上面的评论)。当我删除浏览器中的字符时,Firefox 仍然找不到文件192.168.1.101/otrs/rpc.pl。当有奇怪的字符时,它会抱怨找不到服务器。

标签: php perl apache soap


【解决方案1】:

您的网址中有一个UTF-8 BOM。使用十六进制编辑器将其取出(并保存所有文件没有 BOM)

【讨论】:

  • 这解决了问题。到底应该如何找到这种问题/解决方案(我知道,Stackoverflow ...)。我试图将其保存为 UTF-8 不带 BOM。它看起来更好,但仍然有一个“?”左边。也尝试了其他编码,但结果相同。我正在使用 Netbeans,如何配置它以使其不会出现意外字符/编码?非常感谢!
  • 嗯,它在中间的某个地方,所以可能是复制/粘贴错误(BOM 通常只出现在文档的开始处)。我不使用 Netbeans,但我认为他们有可配置的方法来做到这一点。我会尝试询问 Netbeans 专用论坛/列表或 superuser.com。谷歌似乎在为 Netbeans 谈论类似 contrib/hexedit 之类的东西..
  • 没错,我实际上将这段代码复制到了 Netbeans 中。我想这就是出现这个问题的原因。将来我复制/粘贴代码时会更加小心。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多