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

如何在Chainlink中发送携带JSON请求体的HTTP POST请求?

问题排查点

1. 预言机(Oracle)地址与JobID不匹配

你代码构造函数的注释中标注的Oracle地址为0x109391576634572AA0a18EE0BD3854Ad71Cf814d、JobID为a100c3e583484688be229c6883a2cac3,但实际赋值的Oracle地址为0x917d919dDD0faa12C71146E7DE9BdDD28A7e4aA0、JobID为669d8dac695d4c44b4d65397d4bd253e,如果参数和你选用的POST->Uint256任务的官方参数不一致,预言机节点不会监听到你的请求,自然不会触发回调。
请先确认任务对应的Oracle地址、JobID的正确性,二者必须完全匹配。

2. POST请求缺失必要请求头

你示例的curl命令中携带了Content-Type: application/json请求头,但合约请求中没有添加该头信息,服务端会返回415不支持的媒体类型错误,导致节点无法拿到正确响应。需要在构造请求时添加头参数:

request.add("header", "Content-Type: application/json");

3. RPC地址与目标链不匹配

你需要获取Kovan测试网的区块号,但使用的是已废弃的Rinkeby测试网RPC地址https://rinkeby-light.eth.linkpool.io/,该RPC目前已停止服务,请求无法获得有效返回。请替换为Kovan测试网的可用JSON-RPC地址,或迁移到当前仍在维护的Goerli/Sepolia测试网进行测试。

4. 十六进制返回值未配置转换逻辑

你请求的eth_blockNumber接口返回的result字段是0x开头的十六进制字符串,如果你选用的POST->Uint256任务没有默认开启十六进制转Uint256的逻辑,会导致解析失败,无法回调。需要在请求中添加转换参数,示例如下(具体参数名以任务要求为准):

request.add("hex2uint", "true");

5. 预言机访问权限问题

部分私有预言机仅对白名单地址的请求提供服务,如果你使用的是非公开预言机,需要确认你的合约地址是否已经被加入预言机的白名单。


修改后核心代码示例
function requestData() public returns (bytes32 requestId)
{
    Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);

    // 替换为Kovan测试网可用的JSON-RPC地址
    request.add("post", "替换为Kovan有效RPC地址");
    // 新增Content-Type请求头
    request.add("header", "Content-Type: application/json");
    request.add("body", "{\"id\":0,\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[]}");

    request.add("path", "result");
    // 新增十六进制转Uint配置
    request.add("hex2uint", "true");
    
    request.addInt("times", 1);

    return sendChainlinkRequestTo(oracle, request, fee);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:45:04