简体   繁体   中英

PHP Curl wrong headers?

I'm sending content from a PHP Curl script to an API. I'm using this is to do a POST do my script while passing json headers

 $query = new stdClass; 
 $query->test = 'test';
 $query = json_encode($query);
 $ch = curl_init();         
 curl_setopt($ch, CURLOPT_URL, 'http://localhost');
 curl_setopt($ch, CURLOPT_HEADER, ['Content-Type: application/json', 'Content-Length: '.strlen($query)]);
 curl_setopt($ch, CURLOPT_POST, true);
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
 curl_setopt($ch, CURLOPT_VERBOSE, true);               
 $res = curl_exec($ch);
 curl_close($ch);  

But when I trace what the content type of the request in on the API side, I get

 var_dump($_SERVER['CONTENT_TYPE']);
 //application/x-www-form-urlencoded

Shouldn't I get this instead?

 application/json 

You should use CURLOPT_HTTPHEADER instead of CURLOPT_HEADER

CURLOPT_HEADER can be true/false and define whether include header to response or not

FYI:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); These lines are redundant as you are not using https

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM