当我在本地运行以下 cURL 调用时,我得到了预期的结果。
curl -X POST -H "Accept:application/json" -H "Content-Type: application/x-www-form-urlencoded" "https://XXXX" -d 'grant_type=authorization_code&code=YYYY
当我通过PHP运行cURL调用时,我得到了不同的响应。
$curl = curl_init('https://XXXX');
curl_setopt_array($curl, array(
CURLOPT_HTTPHEADER => array(
'Accept: application/json',
'Content-type: application/x-www-form-urlencoded'
),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => array(
'grant_type' => 'authorization_code',
'code' => 'YYYY'
),
));
$response = curl_exec($curl);
curl_close($curl);
本机调用和 PHP 方法之间有什么功能差异吗?谢谢。
问题是PHP的cURL不信任服务器的HTTPS证书。命令行curl
默认不同。
快速解决方法是将 cURL 配置为始终信任服务器:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
此处描述了正确的修复程序
http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/