cURL + HTTP_POST, keep getting 500 error. Has no idea?

33,773

Solution 1

Some servers (especially requested with SSL) returns 500 in cases when some parameters of request is set incorrect.

To avoid «500 error» (for example) be sure to:

  • set proper "Referer: " header if needed, with

curl_setopt(CURLOPT_REFERER, 'http://site.com/ref_page');

  • set proper "User-Agent: " header, with

curl_setopt(CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');

Solution 2

$url  = "https://www.xxx.xxx";
$post = "";# all data that going to send

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT    5.0'); 

$exe  = curl_exec($ch);
$getInfo = curl_getinfo($ch);

if ($exe === false) {
$output = "Error in sending";
if (curl_error($ch)){
    $output .= "\n". curl_error($ch);
}
} else if($getInfo['http_code'] != 777){
$output = "No data returned. Error: " . $getInfo['http_code'];//as preline
if (curl_error($ch)){
    $output .= "\n". curl_error($ch);
}
}

curl_close($ch);

echo $output;

BTW: Make sure that CURL moduel is installed.

Share:
33,773
mysqllearner
Author by

mysqllearner

Updated on April 10, 2020

Comments

  • mysqllearner
    mysqllearner about 4 years

    Okay, I want to make a HTTP_POST using cURL to a SSL site. I already imported the certificate to my server. This is my code:

    $url  = "https://www.xxx.xxx";
    $post = "";# all data that going to send
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0'); 
    
    $exe  = curl_exec($ch);
    $getInfo = curl_getinfo($ch);
    
    if ($exe === false) {
        $output = "Error in sending";
        if (curl_error($ch)){
            $output .= "\n". curl_error($ch);
        }
    } else if($getInfo['http_code'] != 777){
        $output = "No data returned. Error: " . $getInfo['http_code'];
        if (curl_error($ch)){
            $output .= "\n". curl_error($ch);
        }
    }
    
    curl_close($ch);
    
    echo $output;
    

    It keep returned "500". Based on w3schools, 500 means Internal Server Error. Is my server having problem? How to solve/troubleshoot this?

  • mysqllearner
    mysqllearner about 14 years
    Do you mean, I should contact my hosting company?
  • mysqllearner
    mysqllearner about 14 years
    Sorry. Some typo mistakes. I was editing the code. I checked the code, the variable name is correct, it still gives me "Error: 500". Any idea? (i will edit my question, to avoid, confusion, thanks)
  • mysqllearner
    mysqllearner about 14 years
    Then could it be, server problems? What is that 500 means? I still cant get through, keep return 500. Argggghhh!!!!
  • Young
    Young about 14 years
    probably CURL moduel hasn't been installed yet in your server.
  • mysqllearner
    mysqllearner about 14 years
    Hi SpawnCxy, the cURL module is installed. I was able to send to non-SSL site, using similar codes. Not sure if its about the SSL thingy
  • Kaltezar
    Kaltezar about 14 years
    If you don't have direct access to server's logs, you may ask them to send them to you, yes.