【发布时间】:2017-01-18 11:07:49
【问题描述】:
我正在尝试向 IP:port 发送 XML 请求,但 cURL 总是超时。但是,端点已启动并正在运行。我是否指定了错误的 URL?这就是我所拥有的:
$ip = '90.179.113.54';
$port = '5500';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://' . $ip . ':' . $port);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
$result = curl_exec($ch);
$xml 变量只是我要发送的 XML,所以不用担心。这个端口上的服务器应该返回一个 XML 响应,我想我在 $result 中捕获它。但是,此连接总是以超时结束 - 当我在浏览器中输入 IP/端口时,它不会超时。它返回浏览器无法处理的 XML 响应。
Telnet 响应:
telnet 90.179.113.54 5500
Trying 90.179.113.54...
Connected to 54.113.broadband12.iol.cz.
Escape character is '^]'.
telnet 90.179.113.54 5500
Trying 90.179.113.54...
Connected to 54.113.broadband12.iol.cz.
<?xml version="1.0" encoding="Windows-1250" standalone="yes"?>
<RESPONSE TYPE="0" MODUL="" LANG=""><ERROR ERRNUM="0" ERRMESSAGE="0-OK" ATTRIBUT=""/></RESPONSE>
【问题讨论】:
-
@LucaGiardina 这段代码给了我一个无限旋转的圆圈。只是等待和等待。我认为这是因为巨大的超时值。如果有一个较低的值,它也会超时。
-
你的 CURLOPT_POSTFIELDS 错过了一个 "arg = ".$xml,也许是这个问题,试试看吧..
-
@LucaGiardina 你的意思是
curl_setopt($ch, CURLOPT_POSTFIELDS, "xmlRequest=" . $xml);?这就是我从您提供的 URL 中复制的内容。不工作。 -
“但是,这个连接总是以超时结束——当我在浏览器中输入 IP/端口时,它并没有超时。” -- 你跑了吗与浏览器在同一台计算机上的 PHP 代码?不同的计算机可能使用不同的路由到达远程服务器。此外,即使它们在同一台计算机上,也有可能浏览器使用代理并且 PHP 代码尝试直接连接(这些也是不同的路由)。