调用Twitter API上传图片时持续出现400 Bad Request错误求助
解决Twitter API图片上传400 Bad Request问题
你的代码核心问题是请求头和请求体格式不匹配:Twitter API接收media_data(base64格式图片)时,要求用application/x-www-form-urlencoded格式提交,但你手动设置了multipart/form-data头,导致请求格式混乱,触发400错误。
按以下步骤修改即可解决:
- 移除
headers里的"content-type": "multipart/form-data"配置,axios会自动根据请求体格式设置正确的Content-Type;也可以明确设置为application/x-www-form-urlencoded - 检查
encodedImage是否包含多余前缀(比如data:image/jpeg;base64,),如果有需要去掉,只保留纯base64字符串 - 确保图片文件存在且可读,base64编码过程没有出错
修正后的代码示例:
const encodedImage = fs.readFileSync("/tmp/image.jpg", { encoding: "base64", }); // 可选:如果base64带前缀就清理掉 // const cleanEncodedImage = encodedImage.replace(/^data:image\/jpeg;base64,/, ""); const { data: { media_id }, } = await axios.post( "https://upload.twitter.com/1.1/media/upload.json", { media_data: encodedImage, // 或者用清理后的cleanEncodedImage media_category: "tweet_image", }, { headers: { Authorization: authHeaderMedia["Authorization"], // 不再手动设置multipart/form-data头 }, } );
额外排查点:
- 验证
authHeaderMedia["Authorization"]的OAuth 1.0a签名是否正确,确保签名流程符合Twitter要求 - 检查图片大小是否在限制内(单张图片最大5MB,支持JPG/PNG等格式)
- 可以先用Postman等工具测试API请求,确认参数和签名无误后再迁移到代码中
内容的提问来源于stack exchange,提问作者Fabo
相关产品推荐
相关产品推荐

