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

代码中发送HTTP请求返回404错误,Postman请求却正常

解决request库POST请求404但Postman正常的问题

我在代码里用request库发送POST请求,明明URL、参数和请求体都和Postman里的一模一样,但代码里总是返回404错误,Postman却能成功请求。我实在搞不懂哪里出问题了,相关代码如下:

const promisify = require('util').promisify; 
const { post, get, del } = require('request'); 
const postAsync = promisify(post); 
const post = async (url, payload) => { 
  console.log('USER ID PAYLOAD',payload) 
  return postAsync(url, { 
    headers: { 
      "Content-Type": "application/json", 
      "Accept": "application/json" 
    }, 
    json: true, 
    body: payload 
  }) 
  .then(response => { 
    console.log('USER ID StAtUS CODE', response.url, response.body) 
    if (response.statusCode >= 400) throw new Error(response.body.message || "An error occurred"); 
    if (response.body && (response.body.status === 'error' || response.body.status === 'fail')) throw new Error(response.body.message || "An error occurred"); 
    return response.body; 
  }, error => { 
    throw error; 
  }) 
}

这种情况我之前也碰到过,大概率是request库的参数配置和Postman的默认行为有差异,你可以从这几个方向排查:

  • 检查URL的编码差异:request库可能会自动对URL中的特殊字符进行编码,而Postman的处理方式可能不同。你代码里已经打印了response.url,把这个URL和Postman中实际发送的URL(可以在Postman的"Console"里看完整请求URL)仔细对比,比如空格是转成%20还是+,或者某些路径参数的编码是否一致。
  • 确认请求体的序列化结果:你设置了json: true,request会自动把body序列化为JSON字符串,但有时候可能payload里的特殊值(比如日期对象、undefined)在序列化后和Postman里的不一致。你可以在代码里加一行console.log('Serialized body:', JSON.stringify(payload)),把这个结果和Postman里的请求体(Raw格式)对比,看看是否完全一致。
  • 补全请求头匹配Postman:Postman会自动添加一些默认请求头,比如User-Agent、Host等,而你的代码里只设置了Content-Type和Accept。有些服务器会校验这些头信息,你可以把Postman里的所有请求头都复制到代码的headers对象里,比如加上User-Agent: PostmanRuntime/7.32.3(换成你Postman实际的User-Agent值),再试一次。
  • 排查request库的隐性问题:request库已经被官方标记为弃用状态,可能存在一些未被修复的隐性bug。你可以尝试改用更现代的HTTP库,比如axios,不仅API更简洁,也更容易排查问题。上面的代码用axios改写后大概是这样:
const axios = require('axios');

const post = async (url, payload) => {
  console.log('USER ID PAYLOAD', payload);
  try {
    const response = await axios.post(url, payload, {
      headers: {
        "Content-Type": "application/json",
        "Accept": "application/json",
        // 这里可以加上Postman里的其他请求头
        "User-Agent": "PostmanRuntime/7.32.3"
      }
    });
    console.log('USER ID StAtUS CODE', response.config.url, response.data);
    if (response.data && (response.data.status === 'error' || response.data.status === 'fail')) {
      throw new Error(response.data.message || "An error occurred");
    }
    return response.data;
  } catch (error) {
    throw error.response ? error.response.data.message || "Request failed" : error.message;
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:36:11