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