Friday, October 28, 2022

[SOLVED] PHP CURL returns nothing

Issue

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?


Solution

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.



Answered By - rzetterberg
Answer Checked By - Cary Denson (WPSolving Admin)