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.
精彩评论