Warning: file_get_contents: failed to open stream: Redirection limit reached, aborting

前端 未结 4 1424
北海茫月
北海茫月 2020-12-03 22:40

I read over 20 related questions on this site, searched in Google but no use. I\'m new to PHP and am using PHP Simple HTML DOM Parser to fetch a URL. While this script works

相关标签:
4条回答
  • 2020-12-03 23:07

    I'm not sure exactly why you redefined the $html object with a string from get html, The object is meant to be used for searching the string. If you overwrite the object with a string, the object no longer exists and cannot be used.

    In any case, to search the string returned from curl.

    <?php
    $url = 'http://www.example.com/Results.aspx?isa=1&name=A&csz=AL';
    
    include('simple_html_dom.php');
    
    # create object
    $html = new simple_html_dom();
    
    #### CURL BLOCK ####
    
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    # you may set this options if you need to follow redirects.
    # Though I didn't get any in your case
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    
    $content = curl_exec($curl);
    curl_close($curl);
    
    # note the variable change.
    $string = str_get_html($content);
    
    # load the curl string into the object.
    $html->load($string);
    
    #### END CURL BLOCK ####
    
    # without the curl block above you would just use this.
    $html->load_file($url);
    
    # choose the tag to find, you're not looking for attributes here.
    $html->find('a');
    
    # this is looking for anchor tags in the given string.
    # you output the attributes contents using the name of the attribute.
    echo $html->href;
    ?>
    

    you might be searching a different tag, the method is the same

    # just outputting a different tag attribute
    echo $html->class;
    
    echo $html->id;
    
    0 讨论(0)
  • 2020-12-03 23:14

    Had a similar problem today. I was using CURL and it wasn't returning my any error. Tested with file_get_contents() and I got...

    failed to open stream: Redirection limit reached, aborting in

    Made a few searches and I'v ended with this function that works on my case...

    function getPage ($url) {
    
    
    $useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36';
    $timeout= 120;
    $dir            = dirname(__FILE__);
    $cookie_file    = $dir . '/cookies/' . md5($_SERVER['REMOTE_ADDR']) . '.txt';
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt($ch, CURLOPT_ENCODING, "" );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt($ch, CURLOPT_AUTOREFERER, true );
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout );
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout );
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10 );
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/');
    $content = curl_exec($ch);
    if(curl_errno($ch))
    {
        echo 'error:' . curl_error($ch);
    }
    else
    {
        return $content;        
    }
        curl_close($ch);
    
    }
    

    The website was checking for a valid user agent and for cookies.

    The cookie issue was causing it! :) Peace!

    0 讨论(0)
  • 2020-12-03 23:14

    Resolved with:

    <?php
    $context = stream_context_create(
        array(
            'http' => array(
                'max_redirects' => 101
            )
        )
    );
    $content = file_get_contents('http://example.org/', false, $context);
    ?>
    

    You can also inform if you have a proxy in the middle:

    $aContext = array('http'=>array('proxy'=>$proxy,'request_fulluri'=>true));
    $cxContext = stream_context_create($aContext);
    

    More details on: https://cweiske.de/tagebuch/php-redirection-limit-reached.htm (thanks @jqpATs2w)

    0 讨论(0)
  • 2020-12-03 23:21

    Using cURL you would need to have the CURLOPT_RETURNTRANSFER option set to true in order to return the body of the request with call to curl_exec like this:

    $url = 'http://www.farmersagent.com/Results.aspx?isa=1&name=A&csz=AL';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    // you may set this options if you need to follow redirects. Though I didn't get any in your case
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    $content = curl_exec($curl);
    curl_close($curl);
    
    $html = str_get_html($content);
    
    0 讨论(0)
提交回复
热议问题