我试图通过web前端登录,并试图拦截一个cookie,然后在随后的API请求中使用它。我在将cookie传回GET请求中遇到了麻烦。代码贴在下面。
import https from 'https';
import { bitbucketUser } from "../userRole.js"
import { ClientFunction } from 'testcafe';
fixture `Request/Response API`
// .page `https://myurl.company.com/login`
.beforeEach(async t => {
await t.useRole(bitbucketUser)
});
test('test', async t => {
const getCookie = ClientFunction(() => {
return document.cookie;
});
var mycookie = await getCookie()
const setCookie = ClientFunction(mycookie => {
document.cookie = mycookie;
});
var validatecookie = await getCookie()
console.log(validatecookie)
const executeRequest = () => {
return new Promise(resolve => {
const options = {
hostname: 'myurl.company.com',
path: '/v1/api/policy',
method: 'GET',
headers: {
'accept': 'application/json;charset=UTF-8',
'content-type': 'application/json'
}
};
const req = https.request(options, res => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
let body = "";
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
console.log(body);
});
resolve();
});
req.on('error', e => {
console.error(e);
});
req.end();
});
};
await setCookie(mycookie)
await executeRequest();
});
我已经尝试了几个例子,但很不能理解我到底漏掉了什么。
当你调用 setCookie
方法,您使用ClientFunction修改浏览器中的cookies。然而,当你调用你的 executeRequest
方法,你在服务器端使用nodejs库运行它。当你在客户端设置cookie时,这不会影响你从服务器端发送的请求。您需要直接将cookie信息添加到您的 options
对象,在下面的线程中描述。如何使用cookie创建一个HTTP客户端请求?.