php – file_get_contents()连接拒绝我自己的网站

我一直在尝试使用CURL和 PHP file_get_contents()函数连接到我自己的网站,以获取我的网页来源,但没有成功.我正在尝试从中获取HTML源的同一台服务器上运行PHP脚本. CURL不会返回任何错误,即使使用curl_error()也不会,并且PHP file_get_contents()函数返回以下内容

Warning: file_get_contents([sitename]) [function.file-get-contents]: Failed to open stream: Connection refused in [file path] on line 19.

我不知道为什么会这样.为什么服务器会主动拒绝此连接?我怎么能阻止它?

谢谢

编辑:

这里参考我的(cURL)代码

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.mydomain.co.uk');
curl_setopt($ch,CURLOPT_HEADER,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_REFERER,'');
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2');
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Host: www.mydomain.co.uk')); 

$rawHTML = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);

print $err;
print 'HTML: ' . $rawHTML;
看看你的防火墙设置,它们可能有点过于严格.如果您登录并且会发生什么
telnet localhost 80

或者你选择的操作系统的等价物?并尝试使用localhost而不是服务器的完整ip.只有成功,你才会遇到curl / PHP问题.

编辑:ok,所以使用file_get_contents(“http:// localhost /”);连接到localhost工作.

这意味着您可以通过localhost访问您的站点,但您需要覆盖随请求一起发送的Host:字段.这不是cURL的正常用法,但您可以尝试:

curl_setopt(CURLOPT_HTTPHEADER,array('Host: yourdomain.com'));

请求URL http://127.0.0.1/.我想知道这是否会被curl理解,但你可以试一试.

编辑^ 2:如果这不能欺骗cURL,只需打开自己的套接字连接并发出自己的请求:

$ip = '127.0.0.1';
$fp = fsockopen($ip,80,$errno,$errstr,5);
$result = '';
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.exampl.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp,$out);
    while (!feof($fp)) {
        $result .= fgets($fp,128);
    }
    fclose($fp);
}

(这是来自PHP.net示例的改编)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...