我正在运行两个相同的API请求到第三方API—一个在postman中,另一个在NodeJS中。API在Postman和NodeJS中使用不同的set-cookie
头响应。
我试过:
- 从Postman headers选项卡复制头到我的nodejs请求头。
- 从Postman控制台复制头文件到我的nodejs请求头文件。
- 复制Postman自动生成的
axios
代码 node-fetch
代替axios
- 在Postman中打开/关闭各种设置。
每次,Postman中的API请求都用不同于NodeJS的set-cookie头响应。邮差请求收到了正确的会话令牌,而NodeJS请求没有收到。
- API服务器可以以某种方式区分这两个环境,但是如何区分呢?
- 是邮差运行在一个无头浏览器上,以便它可以"服务器检查浏览器运行时?
- 邮差是一个真正的"卷发"吗?而nodejs请求不是?
- 鉴于请求头和正文在两个请求中都是相同的,哪些变量可以用来区分邮递员请求和nodejs请求?
我将亲自回答这个问题,给那些来这里寻找答案的人。显然,Postman使用了一些神奇的配置来从浏览器发出请求,同时绕过CORS问题。
他们称之为"邮差代理"。看起来它可能是关闭了CORS的无头浏览器前的本地代理(或类似的东西)。
你可以在这里阅读:https://blog.postman.com/introducing-the-postman-agent-send-api-requests-from-your-browser-without-limits/
在我的例子中,问题不是由请求之间的差异引起的。这是由处理响应的方式造成的。Postman显示了在最初的302响应中收到的cookie,然后跟随重定向。NodeJS请求跟随重定向,但在最终响应中没有显示初始的'set-cookie'头。只要我在nodejs中设置redirect: 'manual'
,我就可以从初始302响应中看到正确的标头。