Search code examples
phphttp-status-code-403

file_get_contents won't return the source code


When I execute this code:

var_dump(file_get_contents('http://www.zahnarzt-gisler.ch'));

I get this error:

Warning: file_get_contents(http://www.zahnarzt-gisler.ch): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /home/httpd/vhosts/your-click.ch/httpdocs/wp-content/themes/your-click/ajax-request.php on line 146 bool(false)

I don't know why it is returning false, since when I change the url, e.g. http://www.google.com or any other url, it will work and returns the source code of the page.

I guess it must be something wrong with the url but it just seems weird to me, because it url is online and available.


Solution

  • You can just scrape the page, but you have to set a user-agent. Curl is the way to go.

    file_get_contents() is a simple screwdriver. Great for simple GET requests where the header, HTTP request method, timeout, cookiejar, redirects, and other important things do not matter.

    <?php
    
    $config['useragent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';
    
    $ch = curl_init();
    
    // Set the url, number of GET vars, GET data
    curl_setopt($ch, CURLOPT_URL, 'http://www.zahnarzt-gisler.ch');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);
    
    // Execute request
    $result = curl_exec($ch);
    
    curl_close($ch);
    
    echo $result;
    
    ?>