Php 文件\u获取\u内容对某些url无效

Php 文件\u获取\u内容对某些url无效,php,curl,file-get-contents,Php,Curl,File Get Contents,我在PHP中使用file\u get\u contents。在下面的代码中,第一个URL工作正常,但第二个URL不工作 $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_domai

我在PHP中使用
file\u get\u contents
。在下面的代码中,第一个URL工作正常,但第二个URL不工作


$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;


关于第二个url为什么不起作用有什么建议吗?

看起来第二个url的回答有时太慢,可能有重定向。 尝试使用curl并设置更大的超时。 此外,请启用“错误”

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

不幸的是,第二个站点似乎阻止了来自无法识别的浏览器的访问。即使从命令行使用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命令行的工作原理也是缩短开发时间的一个好方法

这是一位曾经经历过这种情况的人:


文件获取内容无法检索的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);

谢谢大家的指导。

您也可以试试这段代码



那么,第二个url的实际回音是什么?或者您是否收到任何错误消息?您认为“不工作”是什么意思?请在浏览器中打开这两个url。两者都返回HTML页面。可能,它们阻止了非浏览器请求:P@DBK如果是这样的话,还有其他选择吗?谢谢回答。我试过给出另一个答案的url。但它仍然不起作用(不幸的是,每个网站都是不同的-在得到网站接受的http头之前,您可能需要尝试各种不同的http头…或者它可能根本不起作用…或者您甚至可能需要cookie支持欺骗。不幸的是,这里您所能做的就是反复试验-这类事情越来越难做到 :(我还想提到的是,file get_contents不会启动任何会话或设置cookie,这通常是由curl/browsers完成的。是否需要
cookies.txt
文件应该在那里?@hnn只有当
URL
您想在浏览器中维护任何cookie时才需要。这在我没有收到任何响应时对我有效。)使用类似于