You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

从Kobo Toolbox获取数据:API授权及令牌请求404错误求助

问题分析与解决方案

看起来你踩了一个很容易犯的坑——把所有请求都发到了本地的XAMPP服务器(localhost),但Kobo Toolbox的OAuth授权和API服务都托管在官方服务器上,本地Apache当然没有这些端点,所以才会一直返回404错误。

核心修正步骤

1. 修正授权URL

你之前用的授权URL指向了本地服务器,完全错误。替换为Kobo官方的授权端点:

https://kc.kobotoolbox.org/o/authorize/?client_id=MY_CLIENT_iD&response_type=code&state=xyz&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

重要提醒:redirect_uri必须和你在Kobo客户端应用注册时填写的内容完全一致(包括协议、域名、端口、路径),否则会直接授权失败。

2. 修正curl令牌请求的代码

你的curl代码里同样错误地请求了localhost,下面是修正后的完整代码:

$ch = curl_init();
// 替换为Kobo官方的令牌端点
curl_setopt($ch, CURLOPT_URL, "https://kc.kobotoolbox.org/o/token/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=authorization_code&code=PSwrMilnJESZVFfFsyEmEukNv0sGZ8&client_id=MY_CLIENT_ID&redirect_uri=http://localhost:30000");
curl_setopt($ch, CURLOPT_POST, 1);

// 补充说明:如果你的客户端是「保密类型」(比如后端服务),需要用Basic Auth传递客户端ID和密钥
// 把下面的MY_CLIENT_ID和MY_CLIENT_SECRET替换为你在Kobo注册的对应值
curl_setopt($ch, CURLOPT_USERPWD, "MY_CLIENT_ID" . ":" . "MY_CLIENT_SECRET");

$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
echo $result;
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);

3. 额外注意事项

  • 如果你的客户端是公开类型(比如前端应用、移动APP),不需要设置CURLOPT_USERPWD,只需要在POST字段里传递client_id即可。
  • 确认你的网络可以正常访问https://kc.kobotoolbox.org,没有防火墙或代理拦截请求。
  • 授权码code是一次性的,使用后会失效,如果报错提示无效code,需要重新发起授权流程获取新的code。

内容的提问来源于stack exchange,提问作者Asad

火山引擎 最新活动