我目前正在开发一个带有 API 的解决方案。我试图发出一个curl 请求,但由于某种原因,响应总是以0 结尾返回。我不确定是否缺少特定的标头,但 API 本身的文档仅提到使用这些特定的标头。我在这里获得的代码只需要从 API 本身获取身份验证令牌,以便我可以开始使用它来进行 API 操作。无论出于何种原因,API 不包含 API 密钥。但除此之外,这是我的代码:
class API_Connection {
public $auth_token;
public function __construct() {
$api_settings = get_option('api_settings');
$url = 'https://api.example.com/api-token-auth/';
$data = array(
'username' => $geek_api_settings['username'],
'password' => $geek_api_settings['password'],
);
// get the token
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => array('Content-Type: application/json'),
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
));
$result = curl_exec($curl);
$auth_token = $result;
curl_close($curl);
return $auth_token;
}
public function get_auth_token() {
return $this->auth_token;
}
}
当我收到以 json 字符串形式输出的响应时,它总是在响应末尾包含一个 0。目前 API 正在限制我,所以我得到的响应示例是:
{"detail":"请求被限制。预计在 86400 秒内可用。","wait":86400}0.
包含JS,只是为了繁荣,JS如下:
$('#curlAPIToken').on('click', function(e) {
e.preventDefault();
$.ajax({
url: api_settings.ajax_url,
data: {
action: 'curl_auth_token'
},
method: 'POST',
success: function(response) {
console.log(response);
}
})
});
澄清一下,操作
curl_auth_token
只是一个非常简单的函数 - 实例化该类,然后调用 get_auth_token()
。
我一直在寻找,但不明白为什么 0 出现在末尾。我知道我以前见过它并且以前解决过它,但我更习惯于 React 解决方案,而且我似乎无法在 PHP 前端解决它,并且还没有找到任何具有以下解决方案的线程为我工作。如何去掉响应末尾的 0?是的,我已经尝试过
rtrim()
,但这似乎也不起作用。
在进行了一些额外的测试并应用了我的帖子评论中所做的一些更改之后,我发现问题在于 JS 而不是 PHP。当使用
error_log
获取 $result
时,它似乎输出很好,末尾没有 0,并且我从该响应中提取的任何变量也可以在没有 0 的情况下工作,因此从 JS 端我应用了以下内容:
// ...
success: function(response) {
console.log(response);
// remove trailing 0
var token = response.slice(0, -1);
}
这应该有助于我从 API 获得的任何输出,但 PHP 仍然不受此解决方案的影响。谢谢指点!