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

Sarah Jenkins

Senior Technology Editor & AI Specialist

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.

Share this article
Twitter Facebook Pinterest