cURL not returning anything?

前端 未结 4 1272
Happy的楠姐
Happy的楠姐 2020-12-10 08:56
 \"http://domain.com\",
    \"loginCheck\"     => \"checkuser.php\",
    \"userAgent\"         


        
相关标签:
4条回答
  • 2020-12-10 08:58

    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.

    0 讨论(0)
  • 2020-12-10 09:15

    You can use a class that I wrote that wraps around CURL. To install, see: https://github.com/homer6/altumo

    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( 'http://www.domain.com/checkuser.php', 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...

    0 讨论(0)
  • 2020-12-10 09:16

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

    error_reporting(-1);
    $config = array
    (
        "siteURL"        => "http://www.apple.com/",
        "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;
    
    0 讨论(0)
  • 2020-12-10 09:18

    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.

    0 讨论(0)
提交回复
热议问题