PHP CURL returns nothing

jM2.me picture jM2.me · Jun 12, 2011 · Viewed 40.5k times · Source
function ParseUrl($URL)
{
    $crl = curl_init();
    curl_setopt ($crl, CURLOPT_URL, $URL);
    curl_setopt ($crl, CURLOPT_PORT, 8086);
    curl_setopt ($crl, CURLOPT_USERPWD, "admin:pass");
    curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, 5);
    $ret = curl_exec($crl);
    curl_close($crl);
    return $ret;
}

echo ParseUrl('http://xxx.me/serverinfo');

The code above simply returns nothing. The page I am trying to get with curl uses http authentication thing.

Am I missing something simple or what?

Answer

rzetterberg picture rzetterberg · Jun 12, 2011

Start out by doing this and see what you get, and after that it would be pretty obvious what the problem is:

Check if there was an error with the request after curl_exec:

if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}

That will provide you with enough info to know if there was a error with the request. If there was no error, you can check the request sent after curl_exec so you can double check that everything sent is in place:

print_r(curl_getinfo($ch));

Edit: After comments this is what you are looking for what is missing:

You need to set the option CURLOPT_HTTPAUTH.

Quote from php.net on the subject:

The HTTP authentication method(s) to use. The options are: CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM, CURLAUTH_ANY, and CURLAUTH_ANYSAFE.

The bitwise | (or) operator can be used to combine more than one method. If this is done, cURL will poll the server to see what methods it supports and pick the best one.

CURLAUTH_ANY is an alias for CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE is an alias for CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.