php cURL function 301 error

后端 未结 2 1020
独厮守ぢ
独厮守ぢ 2020-12-19 06:56

I am using this code :

function getUrl($url) {
if(@function_exists(\'curl_init\')) {
    $cookie = tempnam (\"/tmp\", \"CURLCOOKIE\");
    $ch = curl_init();         


        
相关标签:
2条回答
  • 2020-12-19 07:43

    CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set

    You may try this:

    Solution 1:

    Set safe_mode = Off in your php.ini file (it's usually in /etc/ on the server). If that's already off, then look around for the open_basedir stuff in the php.ini file and comment that line (#open_basedir...). Restart apache server.

    Solution 2:
    If the above doesn't work (it should!) try this:

    <?php
    function geturl($url){
    
    (function_exists('curl_init')) ? '' : die('cURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini');
    
        $cookie = tempnam ("/tmp", "CURLCOOKIE");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; CrawlBot/1.0.0)');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 5);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_ENCODING, "");
        curl_setopt($ch, CURLOPT_AUTOREFERER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    # required for https urls
        curl_setopt($ch, CURLOPT_MAXREDIRS, 15);     
    
    $html = curl_exec($curl);
    $status = curl_getinfo($curl);
    curl_close($curl);
    
    if($status['http_code']!=200){
        if($status['http_code'] == 301 || $status['http_code'] == 302) {
            list($header) = explode("\r\n\r\n", $html, 2);
            $matches = array();
            preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches);
            $url = trim(str_replace($matches[1],"",$matches[0]));
            $url_parsed = parse_url($url);
            return (isset($url_parsed))? geturl($url):'';
        }
    }
    return $html;
    }
    
    ?>
    
    0 讨论(0)
  • 2020-12-19 07:57

    You might need to enable follow redirects using the location header flag:

    curl -L <URL>

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