开发者

How do I ignore a moved-header with file_get_contents in PHP?

开发者 https://www.devze.com 2023-03-06 05:53 出处:网络
I have p开发者_StackOverflowrogrammed a simple content-user, that uses file_get_contents, but unfortunately for my IP the site now gives a 302 error that forwards to an image. For all other users the

I have p开发者_StackOverflowrogrammed a simple content-user, that uses file_get_contents, but unfortunately for my IP the site now gives a 302 error that forwards to an image. For all other users the normal site is viewable.

How do I rewrite the get_contents so it will just download the content of the website and not actually follow the redirect?

$html = file_get_contents("http://www.site.net/");


You need to create a context:

$context = stream_context_create(
    array (
        'http' => array (
            'follow_location' => false // don't follow redirects
        )
    )
);
$html = file_get_contents('http://www.site.net/', false, $context);

See the manual:

  • file_get_contents
  • stream_context_create

With that said, it's highly likely that there is no content left on the page. It's not impossible to serve a 302 header and serve an HTTP body as well, but it's decidedly unorthodox.


There is no content there. The redirect happens in the HTTP response before any content would be sent.

The server decides what you get to see (or not).


I encountered such a problem accessing Google Drive content via the direct link.

NICE WAY: With the code below it worked again:

//Any google url. Thsi example is fake for Google Drive direct link.
$url = "https://drive.google.com/uc?id=0BxQKKJYjuNElbFBNUlBndmVHHAj";

$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);  
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 3);     
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

I tested it today, 03/19/2018

WRONG WAY: After calling file_get_contents returned 302 Moved temporarily

//Any google url. Thsi example is fake for Google Drive direct link.
$url = "https://drive.google.com/uc?id=0BxQKKJYjuNElbFBNUlBndmVHHAj";
$html = file_get_contents($url);
echo $html; //print none because error 302.
0

精彩评论

暂无评论...
验证码 换一张
取 消