我有一个PHP脚本,尝试使用cURL协议连接位于我办公室本地计算机上运行的IIS安装上的其他PHP脚本,但未能这样做。
本地配置: 我在防火墙上打开了端口8789,我使路由器正确地重定向到运行IIS的机器的IP,并且我将IIS的默认端口设置为8789。 如果我尝试通过浏览器连接到脚本(93.144.xxx.xxx:8987/curl_response.php),我得到结果输出,以便此设置正常工作。
当我尝试在远程网络服务器上运行PHP脚本时虽然它给出了 cUrl错误(#7):无法连接到主机或 cUrl错误(#28) :connect()超时!(我正在尝试不同的网络服务器)
我的PHP脚本的卷曲部分如下:
$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发送的特定标头?
感谢。
答案 0 :(得分:0)
你有一个错字:
curl_setopt ($curl, CURLOPT_URL, $rurl);
应该是:
curl_setopt ($curl, CURLOPT_URL, $url);
以下是工作卷曲请求的示例:
<?php
$url = 'http://thepointless.com:80/';
$curl = curl_init();
curl_setopt ($curl, CURLOPT_VERBOSE, true);
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt ($curl, CURLOPT_HEADER, 0);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt ($curl, CURLOPT_PORT , 80);
$response = curl_exec($curl);
print $response;
?>
它与你的一样,除了三件事:
答案 1 :(得分:0)
使用--verbose从命令行运行cURL以查看更多详细信息。
并检查ISS是否启用了cURL:
extension=php_curl.dll