将 JavaScript Get 请求转换为 PHP Curl

Convert JavaScript Get Request to PHP Curl

我的 PHP Curl 代码没有返回错误或任何响应文本。 JavaScript 代码基于 returns 一个 Json 数组。

PHP 卷曲

  header('Access-Control-Allow-Origin: ' . $_SERVER['SERVER_NAME']);

  $subscriptionKey = '';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://southcentralus.tts.speech.microsoft.com/cognitiveservices/voices/list');
  curl_setopt($ch, CURLOPT_HTTPHEADER, array("Ocp-Apim-Subscription-Key", $subscriptionKey));
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);

  if($response === false)
  {
      echo 'Curl error: ' . curl_error($ch);
  }
  else
  {
      echo 'Operation completed without any errors<br>';
      echo "Response: $response";
  }
  $voices = json_decode($response);

  curl_close($ch);

PHP 结果

工作 Javascript

    var request = new XMLHttpRequest();
    var subscriptionKey = '';
    request.open('GET', 'https://southcentralus.tts.speech.microsoft.com/cognitiveservices/voices/list', true);

    request.setRequestHeader("Ocp-Apim-Subscription-Key", subscriptionKey)
    request.onload = function() {
        if (request.status >= 200 && request.status < 400) {
            const response = this.response;
            const data = JSON.parse(response);
            console.log(data);
        } else {
            window.console.log(this);
        }
    };

    request.send()

JavaScript 结果

我将 CURLOPT_HEADER 更改为 true(感谢 Lucas 的评论),现在出现 401 错误。这让我感到困惑,因为它与 URL 和订阅密钥完全相同。

CURLOPT_HTTPHEADER 的数组每个 header 取一个项目,而不是单独的键和值项目。所以在这种情况下,尝试:

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Ocp-Apim-Subscription-Key: $subscriptionKey"));