2013-06-28 102 views
8

我在PHP中使用file_get_contents。在第一个URL中的下面的代码工作正常,但第二个不工作。file_get_contents不适用于某些网址


$URL = "http://test6473.blogspot.com"; 
$domain = file_get_contents($URL); 
print_r($domain); 


$add_url= "http://adfoc.us/1575051"; 
$add_domain = file_get_contents($add_url); 
echo $add_domain; 

关于为什么第二个不起作用的任何建议?

+1

那么实际回声的第二个网址是什么?还是你收到任何错误信息? –

+1

你是什么意思“不工作”? –

+0

请在浏览器中打开这两个网址。都返回HTML页面。 – Parixit

回答

8

URL,因为他们的服务器检查是否请求从浏览器或任何脚本来。如果他们发现脚本请求,他们只是禁用页面内容。

这样我就可以提出类似于浏览器请求的请求。所以我使用下面的代码来获取第二个url内容。对于不同的Web服务器可能会有所不同。因为他们可能保持不同的检查。

即使为什么不尝试使用下面的代码!如果你幸运,这可能适合你!

function getUrlContent($url) { 
    fopen("cookies.txt", "w"); 
    $parts = parse_url($url); 
    $host = $parts['host']; 
    $ch = curl_init(); 
    $header = array('GET /1575051 HTTP/1.1', 
     "Host: {$host}", 
     'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
     'Accept-Language:en-US,en;q=0.8', 
     'Cache-Control:max-age=0', 
     'Connection:keep-alive', 
     'Host:adfoc.us', 
     'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36', 
    ); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 

    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    return $result; 
} 

$url = "http://adfoc.us/1575051"; 
$html = getUrlContent($url); 

感谢大家的指导。

+0

而且我想提及的是,文件get_contents不会启动任何会话或设置通常由curl/browsers完成的cookie。 – Parixit

+0

是否需要cookies.txt文件? –

+0

@hnn只有当您想要调用的URL才能在浏览器中维护任何cookie时才有必要。 – Parixit

1

看起来像第二个网址有时太慢,可能有重定向。 尝试使用卷曲并设置较大的超时。 也把错误的

error_reporting(-1); 
ini_set('display_errors','On'); 
2

不幸的是,它看起来像第二个站点阻止无法识别的浏览器访问。即使是使用curl命令行不起作用:

curl -I http://adfoc.us/1575051 

给出:

HTTP/1.1 200 OK 
Server: cloudflare-nginx 
Date: Fri, 28 Jun 2013 12:15:40 GMT 
Content-Type: text/html 
Connection: keep-alive 
X-Powered-By: PHP/5.5.0 
Set-Cookie: __cfduid=d7cd1bf18c136a288cc2b36065a3b31f01372421740; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.adfoc.us 
CF-RAY: 85a4dc6829e06d0 

,但没有内容。注意它返回状态200,所以如果你检查返回的字符串为boolean === false来查看它是否失败,它实际上会显示为它已经工作。

如果您需要欺骗useragent(以及其他可能的事情)来尝试让url接受您的请求,那么您需要尝试使用curl库并尝试不同的组合以尝试使其运行。首先试验看看curl命令行有什么作用,这也是减少研究时间的好方法。

这里的人谁之前已经通过这样的:它没有被检索的file_get_contents

php curl: how can i emulate a get request exactly like a web browser?

+0

感谢您的回答。我已经尝试给出aonther答案的网址。但它仍然没有工作。 :( – Parixit

+1

不幸的是每个网站都不一样 - 你可能需要尝试各种不同的http标题,然后才能得到一个网站接受的标题...或者它可能永远不会工作......或者你甚至可能需要cookie支持欺骗。不幸的是,试验和错误是你在这里可以做的 - 这种东西越来越难做:( – fquinner

相关问题