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

后端 未结 3 533
无人及你
无人及你 2020-12-03 23:59

I have programmed 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 use

相关标签:
3条回答
  • 2020-12-04 00:43

    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).

    0 讨论(0)
  • 2020-12-04 00:45

    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.

    0 讨论(0)
  • 2020-12-04 00:54

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

    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.
    

    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

    0 讨论(0)
提交回复
热议问题