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

Cookies 邮递员:如何删除预请求脚本中的cookie?,cookies,session-cookies,postman,Cookies,Session Cookies,Postman,我看到的所有邮递员cookie管理答案都是指浏览器扩展(打开chrome、删除cookie viz拦截器等)或应用程序,使用UI手动管理cookie 作为编写API测试脚本的一部分,我想删除请求前代码中的某些cookie。(以编程方式删除它们) Sandobx API文档提到了pm.cookies,所以我试了一下 if (pm.cookies !== null) { console.log("cookies!"); console.log(pm.cookies); } 但是pm.c

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

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

Sandobx API文档提到了
pm.cookies
,所以我试了一下

if (pm.cookies !== null) {
   console.log("cookies!");
   console.log(pm.cookies);
}
但是
pm.cookies
数组是空的。然而,在控制台中,GET调用随后传递一个cookie

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


建议致电邮递员回音服务删除cookie。我还没有对此进行调查,但感觉不对。

根据文档,
pm.cookie
API只用于测试选项卡,不用于请求前脚本

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

下午好


似乎您必须坚持这种方法:

新版本现在支持2019/08年以来的这种方法,请参见此处的更多示例:

先决条件 要授予程序访问权限的Cookie域必须为

清除所有cookies
const-jar=pm.cookies.jar();
clear(pm.request.url,函数(错误){
//错误-
});
得到所有的饼干
const-jar=pm.cookies.jar();
jar.getAll('http://example.com,函数(错误,cookies){
//错误-
//饼干-
//邮差名单:https://www.postmanlabs.com/postman-collection/CookieList.html
});
获取特定的cookie
const-jar=pm.cookies.jar();
jar.get('http://example.com“,”标记“,函数(错误,值){
//错误-
//价值-
});

我知道这是一个很晚的答案,但对于我不想使用cookies开始执行收集的情况,我只需要取消选中“收集运行后保存cookies”选项,并选中Runner面板上的“不使用存储的cookies运行收集”选项

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

pm.environment.set('cookie', pm.cookies.get('csrftoken'))
pm.environment.set('sessionid', pm.cookies.get('sessionid'))

(这是特定于postman应用程序的,不是扩展,如果我不清楚,很抱歉)如果您的API具有可用于cookies的删除功能(如postman echo),您可以构建一个请求来删除它们,并链接您想要执行的请求(通过setNextRequest())。关于postman echo的答案是一条死胡同,cookie链接到域,因此您的cookie将链接到您的域,而不是postman echo,然后不会被删除。太糟糕了,它实际上从cookie manager中删除了cookie。您可以在此处查看,但是如果您的cookie仅设置了http_,您将无法访问(并删除)它。在我的例子中,它是http_only(sob)。否则你可以更改它的日期(用javascript访问它)并将其设置为昨天,甚至-1可以工作,我认为…这有一个功能要求:但是拦截器仅限于Chrome插件,它很快就会退役,不是吗?表示pm.cookies现在可用于本机应用程序,但我也看到了与cookie对象为空的op相同的行为。从2020年的这个日期起,Postman确实允许在预请求脚本中使用pm.cookies.jar(),因此@aaron的答案现在似乎更合适。谢谢!我注意到访问cookie需要将域列入白名单:值得注意的是,在本例中传递给
jar.get
url
必须包含请求路径(如果有)。不过,它不需要包含任何查询字符串。例如:“请注意,此处显示的URL包括“https://”,但未显示。您需要在获取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
});
const jar = pm.cookies.jar();

jar.get('http://example.com', 'token', function (error, value) {
  // error - <Error>
  // value - <String>
});
pm.environment.set('cookie', pm.cookies.get('csrftoken'))
pm.environment.set('sessionid', pm.cookies.get('sessionid'))