PHP cURL 给出的结果与本机 cURL 不同


PHP cURL giving a different result than native cURL

当我在本地运行以下 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/