使用JavaScript Axios向以太坊Kovan网络发请求返回400错误求助
问题原因
你遇到的400错误本质是请求体不符合Infura以太坊节点的JSON-RPC 2.0接口规范,你当前自定义的blockID字段结构不是Infura认可的请求格式。
以太坊所有节点(包括Infura提供的节点)的RPC接口都要求请求体必须包含以下固定字段:
jsonrpc:固定值为"2.0"method:你要调用的以太坊RPC方法名,比如获取区块用eth_getBlockByNumber、提交已签名交易用eth_sendRawTransactionparams:对应方法的参数数组id:请求标识,可自定义数字或字符串
修正方案
这里假设你的需求是根据输入的区块号查询区块信息,给出修正后的代码示例:
const axios = require('axios'); document.getElementById("search").addEventListener('click', async () => { // 获取前端输入的区块号 const BlockId = document.getElementById("blockID").value; // 注意:以太坊RPC要求区块号必须是0x开头的十六进制字符串,如果输入是十进制需要转换 const blockHex = '0x' + parseInt(BlockId).toString(16); try { const response = await axios({ method: 'post', url: "https://kovan.infura.io/v3/025faa826802466c8c568db0baa4aa32", headers: { 'Content-Type': 'application/json' }, // 标准JSON-RPC请求体 data: { jsonrpc: "2.0", method: "eth_getBlockByNumber", // 替换为你实际需要调用的RPC方法 params: [blockHex, false], // 第二个参数为false代表只返回交易哈希,true返回完整交易信息 id: 1 } }); console.log("请求成功", response.data); } catch (error) { // 打印Infura返回的具体错误详情,方便排查 console.log("错误详情:", error.response ? error.response.data : error.message); } });
其他注意事项
- 如果你实际需求是提交交易到链上,需要先在本地对交易签名,再调用
eth_sendRawTransaction方法,把签名后的交易十六进制字符串放到params数组里,不能直接传区块ID - Kovan测试网已经弃用,建议切换到Goerli、Sepolia等仍在维护的测试网
内容的提问来源于stack exchange,提问作者chaud
相关产品推荐
相关产品推荐

