Axios调用Threads API POST视频返回400错误(Postman正常)
Threads API视频发布400 Bad Request问题排查
在Node.js应用中使用Axios调用Threads API发布视频时,遇到以下问题:创建媒体容器的请求正常返回mediaID,但调用threads_publish接口时返回400 Bad Request。相同请求在Postman中可正常执行,且同一端点发布纯文本内容无异常。
代码实现
module.exports = async (title, url) => { try { // 创建媒体容器 console.log( "video_url", url, "text:", title, "access_token", process.env.THREADS_ACCESS_TOKEN ); const mediaContainer = await axios.post( "https://graph.threads.net/v1.0/8063816050370756/threads", { media_type: "VIDEO", video_url: url, text: title, access_token: process.env.THREADS_ACCESS_TOKEN, // 令牌需在2024年8月25日后60天更换 } ); const mediaID = mediaContainer.data.id; console.log("***** MEDIA ID *****"); // 发布请求返回400 Bad Request const postId = await axios.post( "https://graph.threads.net/v1.0/8063816050370756/threads_publish", { creation_id: mediaID, access_token: process.env.THREADS_ACCESS_TOKEN, } ); console.log(postId); } catch (err) { console.log("Error in uploading to Threads...moving on", err.message); } };
关键细节
- 调用
/threads接口创建视频媒体容器,请求正常,可获取到有效的mediaID - 调用
/threads_publish接口执行发布,返回400 Bad Request错误 - 同一端点发布纯文本内容时,流程无异常
已尝试的排查步骤
- 验证access_token和mediaID的有效性,确认两者均正确无误
- 确认环境变量
THREADS_ACCESS_TOKEN已正确配置且可正常读取
针对性排查方案
等待媒体容器处理完成
Threads API处理视频需要转码时间,创建媒体容器后立即调用发布接口会因媒体未就绪导致400错误。需轮询检查媒体状态,直到status变为FINISHED:async function waitForMediaReady(mediaId, accessToken) { let status; do { const res = await axios.get(`https://graph.threads.net/v1.0/${mediaId}`, { params: { access_token: accessToken, fields: 'status' } }); status = res.data.status; if (status !== 'FINISHED') await new Promise(resolve => setTimeout(resolve, 2000)); } while (status !== 'FINISHED'); } // 在获取mediaID后添加等待逻辑 await waitForMediaReady(mediaID, process.env.THREADS_ACCESS_TOKEN);切换请求数据格式为FormData
Postman默认以FormData格式发送请求,而Axios默认发送JSON。尝试将发布请求改为FormData格式:const formData = new FormData(); formData.append('creation_id', mediaID); formData.append('access_token', process.env.THREADS_ACCESS_TOKEN); const postId = await axios.post( "https://graph.threads.net/v1.0/8063816050370756/threads_publish", formData, { headers: formData.getHeaders() } );捕获完整错误详情
当前仅打印错误消息,无法获取API返回的具体错误原因。修改catch块打印完整响应数据:catch (err) { console.log("Threads上传错误详情:", err.response?.data || err.message); }验证视频合规性
确认视频符合Threads的官方要求:- 视频时长:15秒至10分钟
- 文件大小:不超过1GB
- 分辨率:最大1080p(1920x1080)
- 格式:MP4或MOV
内容的提问来源于stack exchange,提问作者Emiliano
相关产品推荐
相关产品推荐

