CURL Not Returning Anything?

CURL Not Returning Anything?
<?php
error_reporting(-1);
$config = array
(
    "siteURL"        => "",
    "loginCheck"     => "checkuser.php",
    "userAgent"      => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16"
);

$postFields = "username=user&password=pass&submit= Login ";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $config['siteURL'] . $config['loginCheck']);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, config['userAgent']);
curl_setopt($ch, CURLOPT_REFERER, config['siteURL']);

$content = curl_exec($ch);
curl_close($ch);

echo $content;

?>

I expect this to be echoing the result of the curl, but its not. am I doing anything wrong?

6

4 Answers

It does, if you set a complete URL with a '/' at the end (fix two other typos):

error_reporting(-1);
$config = array
(
    "siteURL"        => "",
    "loginCheck"     => "checkuser.php",
    "userAgent"      => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16"
);

$postFields = "username=user&password=pass&submit= Login ";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $config['siteURL'] . $config['loginCheck']);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $config['userAgent']);
curl_setopt($ch, CURLOPT_REFERER, $config['siteURL']);

$content = curl_exec($ch);
curl_close($ch);

echo $content;
1

If curl doesn't return anything then you have to check for the reason why that happen. Check for the last curl error message:

if(curl_exec($ch) === false)
{
    echo 'Curl error: ' . curl_error($ch);
}
else
{
    echo 'Operation completed without any errors, you have the response';
}

Basically it would be good to always check on that. You shouldn't assume that curl request succeeded.

2

Two of your variables are named badly:

curl_setopt($ch, CURLOPT_USERAGENT, config['userAgent']);
curl_setopt($ch, CURLOPT_REFERER, config['siteURL']);

Should be:

curl_setopt($ch, CURLOPT_USERAGENT, $config['userAgent']);
curl_setopt($ch, CURLOPT_REFERER, $config['siteURL']);

My guess is that PHP faulted to a blank page (since the variable is seen as a constant but constants must be scalar).

Another issue may be the user agent. I've seen servers that completely refuse to reply if no user agent was set.

3

You can use a class that I wrote that wraps around CURL. To install, see:

It's much easier to use and can give you some easy to access debugging. For example:

try{

    //load class autoloader
        require_once( __DIR__ . '/loader.php' );  //you should ensure that is is the correct path for this file

    //make the response; return the response with the headers
        $client = new \Altumo\Http\OutgoingHttpRequest( ' array(
            'username' => 'user',
            'password' => 'pass',
            'submit' => ' Login '
        ));
        $client->setRequestMethod( \Altumo\Http\OutgoingHttpRequest::HTTP_METHOD_POST );

    //send the request (with optional arguments for debugging)           
        //the first true will return the response headers
        //the second true will turn on curl info so that it can be retrieved later
        $response = $client->send( true, true );

    //output the response and curl info
        \Altumo\Utils\Debug::dump( $response, $client->getCurlInfo() );

    //alternatively, you can get the response wrapped in an object that allows you to retrieve parts of the response
        $http_response =  $client->sendAndGetResponseMessage( true );
        $status_code = $http_response->getStatusCode();
        $message_body = $http_response->getMessageBody();
        $full_http_response = $http_response->getRawHttpResponse();
        \Altumo\Utils\Debug::dump( $status_code, $message_body, $full_http_response );


}catch( \Exception $e ){

    //This will display an error if any exceptions have been thrown
    echo 'Error: ' . $e->getMessage();

}

Hope that helps...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Sarah Jenkins
Author

Sarah Jenkins

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.