邮递员:如何删除预请求脚本中的cookie?

问题描述 投票:0回答:4

我见过的所有邮递员 cookie 管理答案都指的是浏览器扩展(打开 chrome、删除 cookie 即拦截器等)或使用应用程序,使用 UI 手动管理 cookie。

我想删除预请求代码中的某些 cookie,作为编写 API 测试脚本的一部分。 (以编程方式删除它们)

Sandobx API 文档提到

pm.cookies
所以我尝试了

if (pm.cookies !== null) {
   console.log("cookies!");
   console.log(pm.cookies);
}

但是

pm.cookies
数组是空的。然而在控制台中,GET 调用会传递一个 cookie。

还有

postman.getResponseCookies
,它是空的(我假设是因为我们处于预请求部分,而不是测试部分)

一个答案建议调用postman-echo服务来删除cookie。我还没有研究过这个,但感觉不太对。

cookies session-cookies postman
4个回答
9
投票

自 2019/08 起,新版本现已支持该功能,请在此处查看更多示例:以编程方式删除 cookie · 问题 #3312 · postmanlabs/postman-app-support

先决条件

要授予编程访问权限的 Cookie 域必须列入白名单

清除所有cookie

const jar = pm.cookies.jar();

jar.clear(pm.request.url, function (error) {
  // error - <Error>
});

获取所有cookie

const jar = pm.cookies.jar();

jar.getAll('http://example.com', function (error, cookies) {
  // error - <Error>
  // cookies - <PostmanCookieList>
  // PostmanCookieList: https://www.postmanlabs.com/postman-collection/CookieList.html
});

获取特定的cookie

const jar = pm.cookies.jar();

jar.get('http://example.com', 'token', function (error, value) {
  // error - <Error>
  // value - <String>
});

7
投票

根据文档 pm API 参考

pm.cookie
API 仅适用于测试选项卡,不适用于预请求脚本。

以下项目仅在测试脚本中可用。

pm.cookies

...

看来你必须坚持使用这种方法:拦截器博客文章


0
投票

不要忘记将您的域名添加到白名单,否则您将无法清除 cookie。

    const jar = pm.cookies.jar();
    
    jar.clear(pm.request.url, function (error) {
      console.log('error: ' + error)
    });

图托:


-1
投票

我知道这是一个很晚的答案,但对于我不想使用cookie来启动集合执行的情况,我只需要取消选中“集合运行后保存cookie”选项并选中运行器面板上的选项“运行集合而不使用存储的 cookie”。

然后,如果我想自己管理 cookie,我会在集合上创建第一个请求,并使用“测试”选项卡来收集我想要的 cookie 并将它们保存在变量中。

pm.environment.set('cookie', pm.cookies.get('csrftoken'))
pm.environment.set('sessionid', pm.cookies.get('sessionid'))
© www.soinside.com 2019 - 2024. All rights reserved.