Question

I am trying to fetch this image using cURL:

http://habbo.com/habbo-imaging/avatarimage?user=-Claire%21&action=std&direction=3&head_direction=3&gesture=std&size=m&img_format=gif

If you visit this Site in the Browser, you will see an image, but if I use Curl:

$ch = curl_init("http://habbo.com/habbo-imaging/avatarimage?user=-Claire%21&action=std&direction=3&head_direction=3&gesture=std&size=m&img_format=gif");
$fp = fopen($img, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_exec($ch);
curl_close($ch);
fclose($fp);

The Image File just contains this HTML Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
function getCookie(c_name) { // Local function for getting a cookie value
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start!=-1) {
        c_start=c_start + c_name.length + 1;
        c_end=document.cookie.indexOf(";", c_start);

        if (c_end==-1) 
            c_end = document.cookie.length;

        return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return "";
}
function setCookie(c_name, value, expiredays) { // Local function for setting a value of a cookie
    var exdate = new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie = c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toGMTString()) + ";path=/";
}
function getHostUri() {
    var loc = document.location;
    return loc.toString();
}
setCookie('YPF8827340282Jdskjhfiw_928937459182JAX666', '176.198.73.37', 10);
location.href = getHostUri();
</script>
</head>
<body>
<noscript>This site requires JavaScript and Cookies to be enabled. Please change your browser settings or upgrade your browser.</noscript>
</body>
</html>

As you can see I tried to include a cookies.txt which is in the same directory as the script that is executed. The cookies.txt has 777 rights and looks like this:

YPF8827340282Jdskjhfiw_928937459182JAX666=176.198.73.37;

I thought that would do the trick, as it seems to me that I do need a cookie to get the image, but it doesn't work. Does anyone understand the procedure and can tell me how to download that image?

Was it helpful?

Solution

Firstly you have to perform two requests: 1st for initial download and 2nd for passing cookie.

Secondly this cookie is set by Javascript. cURL can't handle such cookies. So you have to handle this cookie manually: parse its value from html and pass it to next cURL request. You can do it by setting option CURLOPT_COOKIE.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top