【发布时间】:2017-08-25 19:45:21
【问题描述】:
我有一个 PHP 脚本,它尝试使用 cURL 协议连接位于我办公室的本地计算机上运行的 IIS 安装上的另一个 PHP 脚本,但未能这样做。
本地配置: 我已经在防火墙上打开了 8789 端口,我让路由器正确重定向到运行 IIS 的机器的 IP,并且我已经将 IIS 的默认端口设置为 8789。 如果我尝试通过浏览器连接到脚本 (93.144.xxx.xxx:8987/curl_response.php),我会得到结果输出,因此此设置正常工作。
当我尝试在远程网络服务器上运行 PHP 脚本时,尽管它给出了我的 cUrl 错误 (#7): 无法连接到主机 或 cUrl 错误 (#28) : connect() 超时!(我正在尝试不同的网络服务器)
我的 PHP 脚本的 curl 部分如下:
$url = 'http://93.144.xxx.xxx:8789/curl_response.php';
$verbose = fopen('php://temp', 'w+');
$curl = curl_init();
curl_setopt ($curl, CURLOPT_VERBOSE, true);
curl_setopt ($curl, CURLOPT_STDERR, $verbose);
curl_setopt ($curl, CURLOPT_URL, $rurl);
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt ($curl, CURLOPT_HEADER, 0);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt ($curl, CURLOPT_PORT , 8789);
$response = curl_exec($curl);
if ($response === FALSE) {
printf("cUrl error (#%d): %s<br>\n", curl_errno($curl),
htmlspecialchars(curl_error($curl)));
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog),"</pre>\n";
}else{
curl_close($curl);
// trim response (serialized array)
$response = trim($response);
// unserialize
$response = unserialize($response);
print_r($response);
}
我尝试了几种不同的 CURLOPT_ 配置,甚至尝试使用 dyndns 主机而不是 IP,但无济于事。
是否需要设置 IIS 配置以使其接受传入的 cURL 请求,或者是否有要通过 cURL 发送的特定标头?
谢谢。
【问题讨论】:
-
您可以通过增加超时来检查.. 将其增加到 60 并进行测试。并删除最后一个 curl 选项 CURLOPT_PORT