【问题标题】:Convert JavaScript Get Request to PHP Curl将 JavaScript Get 请求转换为 PHP Curl
【发布时间】:2021-03-29 14:47:13
【问题描述】:

我的 PHP Curl 代码没有返回错误或任何响应文本。我基于它的 JavaScript 代码返回一个 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 的 cmets),现在出现 401 错误。这让我感到困惑,因为它是完全相同的 URL 和订阅密钥。

【问题讨论】:

  • 您是否尝试过在脚本前面添加echo 语句以查看它的执行情况?如果ifelse echo 语句都没有被触发,则表明执行早期存在问题。我会从第 1 行的 echo 开始,中间有几个点,看看它有多远......
  • @lucas “操作完成”打印出来。回家后我可能应该尝试打开所有错误。
  • “Response:”这个词打印出来了吗?我不明白为什么会打印“操作完成”行,但之后没有。顺便说一句,如果有问题的 url 返回一个没有正文的 401,我希望变量 $response 是一个空字符串,因为 CURLOPT_HEADER 不正确。
  • @lucas 它正在被打印出来。
  • 您能粘贴您从 PHP 和 javascript 看到的确切输出吗? subscriptionKey 在二进制情况下也绝对是一个空字符串吗?

标签: javascript php curl php-curl


【解决方案1】:

CURLOPT_HTTPHEADER 的数组每个标头采用一项,而不是键和值的单独项。所以在这种情况下,请尝试:

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

【讨论】:

  • 太棒了!!我永远不会那样做。谢谢你的坚持。
猜你喜欢
  • 1970-01-01
  • 2017-08-03
  • 2021-03-17
  • 1970-01-01
  • 2017-04-12
  • 2019-11-04
  • 1970-01-01
  • 2018-06-07
相关资源
最近更新 更多