14

我正在使用Postman来测试和使用 API。

对于登录 url,API 需要发送一个带有usernamepassword作为字段的 POST 请求。我这样做了,我得到了200我已登录的消息的响应。

然后我尝试另一个请求来获取用户数据。但是,我收到未登录的回复。

我意识到这个问题很可能是因为我登录时发送给我的 cookie 没有包含在下一个 Postman 请求中。

所以我的问题是,如何保存和包含 cookie 以供将来的请求使用?

4

4 回答 4

10

将要使用的 cookie 值存储在全局变量Tests中。在登录请求选项卡中,写入

postman.setGlobalVariable('key', postman.getResponseCookie("cookieName").value);

Headers在获取用户请求中将选项卡中的值作为 cookie传递:

Cookie | cookieName={{key}}
于 2018-05-10T11:22:39.333 回答
3

我尝试使用 Ashutosh 的答案,但出现错误。我猜这是因为 Postman 的脚本 API 改变了?

无论如何,以下对我有用:

  1. Tests将返回您要保存的 cookie 的请求选项卡中,写入
pm.globals.set('<your key>', pm.cookies.get('<cookie name>'));
  1. 然后,如 Ashutosh 的回答中所述,通过将键设置为cookie并将相应的值设置为 ,将 cookie 添加到标头中<your cookie name>={{<global variable name>}};

我在Postman 沙箱 API 参考中找到了相关文档。

于 2019-06-26T20:47:11.227 回答
1

2020 年 12 月 18 日更新,使用没有拦截器的本地 Postman 应用程序)读取 cookie 的传统方式对我不起作用pm.cookies.get('<cookie name>') 。这是一种自动将身份验证 cookie 附加到集合中的所有请求的解决方法:

// The test scripts below run after the api /login returns the response

const authCookie = pm.response.headers.idx(3).value
/* 
pm.response.headers.idx(3) is equal to:
{key: "Set-Cookie", value: "xs=eyJhb; Max-Age=3600; Path=/; Expires=Fri, 18 Dec 2020 04:40:34 GMT; HttpOnly; Secure; SameSite=None"} 
*/

const token = authCookie.substring(3, authCookie.indexOf(';'))
pm.collectionVariables.set('xs_value', token);

然后将此预请求脚本添加到整个集合中:

// Scripts below runs before any request within a collection is sent

const token = pm.collectionVariables.get('xs_value')
pm.request.headers.upsert({ key: 'Cookie', value: `xs=${token}` })

享受!

有关如何将标头附加到请求的更多信息

于 2020-12-18T04:00:58.930 回答
0

谷歌浏览器中似乎有两个拦截器插件。确保安装正确的

于 2015-12-08T21:01:32.573 回答