You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Salesforce发送带查询参数的HTTP URL请求失败问题

解决Salesforce请求KoboToolbox带查询参数返回404的问题

核心原因

直接在APEX里拼接包含JSON结构的query参数到URL时,JSON里的{、}、:等特殊字符没有被URL编码,导致KoboToolbox服务器无法正确解析请求路径,返回404错误。Postman会自动对URL参数进行编码,所以能正常工作。

解决步骤

1. 对查询参数做URL编码

用Salesforce的EncodingUtil.urlEncode()工具类对整个query参数的JSON值进行编码,确保特殊字符被正确转义。修改后的代码如下:

HttpRequest req = new HttpRequest();
String koboproject = 'aMeaT8CnGtoTTmooz3uKkq';
String LastDate = '2023-11-16T01:02:03';

// 先构造完整的查询JSON
String queryJson = '{"_submission_time": {"$gt":"' + LastDate + '"}}';
// 对JSON字符串做UTF-8编码
String encodedQuery = EncodingUtil.urlEncode(queryJson, 'UTF-8');

// 拼接端点时使用编码后的参数
String endpoint = 'https://eu.kobotoolbox.org/api/v2/assets/' + koboproject + '/data/?format=json';
endpoint += '&query=' + encodedQuery;
endpoint += '&limit=3'; // 按需添加limit参数

req.setEndpoint(endpoint);  
System.debug(endpoint);
req.setMethod('GET');
req.setHeader('Authorization', 'Bearer b4c6cdf15eb891ab2a29495a02355d98925f9b2d');
req.setHeader('Accept', 'application/json');

Http http = new Http();
HttpResponse resp = http.send(req);
System.debug('RESP CODE:' + resp.getStatusCode());
if (resp.getStatusCode() == 200) {
     return resp.getBody();
} else {
    return 'failed!';
}

2. 确认远程站点设置(基础验证)

虽然你不带查询参数的请求能成功,但还是可以再确认下远程站点配置:

  • 进入Salesforce Setup,搜索「远程站点设置」
  • 检查是否存在https://eu.kobotoolbox.org的条目,没有的话就添加,勾选「启用远程站点」

3. Lightning环境需检查CSP信任站点(可选)

如果是在Lightning组件里发起的请求,还要确认内容安全策略(CSP)是否信任该域名:

  • 进入Setup,搜索「CSP信任站点」
  • 添加https://eu.kobotoolbox.org,确保允许GET请求

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:52:43