PHP CURL returns nothing
Asked Answered
T

2

30
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?

Tamishatamma answered 12/6, 2011 at 21:33 Comment(2)
If you have any special characters in the username and password (e.g. an @ symbol if your username is an email address), make sure they're escaped.Recollected
No, username is simply "admin" and password is simple as well.Tamishatamma
K
75

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.

Kellda answered 12/6, 2011 at 21:39 Comment(3)
Curl doesn't return any error but with print_r(curl_getinfo($ch)); i noticed [http_code] => 401 >_< If there a simple way to grab file from a url with http authentication. url format is following "admin:[email protected]:8086/serverinfo"Tamishatamma
Also even file_get_contents with full url (with credentials and port) returns 401 Unauthorized. But I can simply navigate to link and browser and it works as it should.Tamishatamma
Thank helped :) I actually realized that I was missing auth option after searching curl 401. But thank you very much, problem solved :)Tamishatamma
M
0

In my case there was a space before endpoint definition.

curl_setopt($ch, CURLOPT_URL, " https://api.example.com/someAction);

So if nothing returns from a curl response, double check the curl options you define before going insane whether the posted json is valid or not.

Maxma answered 23/10, 2022 at 16:43 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.