我正在使用Postman来测试和使用API。
对于登录网址,API要求发送包含username
和password
字段的POST请求。我执行此操作,并收到200
响应,其中包含我已登录的消息。
然后我尝试另一个获取用户数据的请求。但是,我得到了一个我没有登录的回复。
我意识到这个问题很可能是因为我登录时发送给我的cookie未包含在下一个Postman请求中。
所以我的问题是,如何为将来的请求保存和包含cookie?
答案 0 :(得分:7)
将要使用的cookie值存储在全局变量中。在登录请求的Tests
选项卡中,写入
postman.setGlobalVariable('key', postman.getResponseCookie("cookieName").value);
在获取用户请求中将Headers
标签中的值作为Cookie传递:
Cookie | cookieName={{key}}
答案 1 :(得分:4)
答案 2 :(得分:0)
似乎谷歌浏览器中有两个Interceptor插件。确保安装correct one。
答案 3 :(得分:0)
我尝试使用Ashutosh的答案,但出现错误。我猜这是因为Postman的脚本API发生了变化?
无论如何,以下对我有用:
Tests
标签中,该标签将返回您要保存的Cookie,请写pm.globals.set('<your key>', pm.cookies.get('<cookie name>'));
cookie
,并将对应值设置为<your cookie name>={{<global variable name>}};
,将cookie添加到标题中。我在Postman sandbox API reference上找到了相关文档。
答案 4 :(得分:0)
(于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}` })
享受!
的更多信息