Как изменить заголовки запроса, используя протокол Puppeteer & Chrome DevTools? (Возможно, проблема с синтаксисом JS)
У меня есть следующая функция Typescript, которая предполагает, что браузер Chrome уже запущен с использованием Puppeteer. Документацию по функциям Fetch, используемым ниже, можно найти здесь.
async function modify(client: CDPSession) {
client.on('Fetch.requestPaused', async ({ requestId, request, frameId, resourceType, responseErrorReason, responseStatusCode, responseHeaders, networkId }) => {
// Correctly prints out the User-Agent header's value
console.log(request.headers["User-Agent"]);
// After this line is run, I can inspect the request.headers object and see that User-Agent was successfully edited
request.headers['User-Agent'] = 'trying to edit this header';
// Continuing the request gives an error
await client.send('Fetch.continueRequest', {
requestId: requestId,
headers: request.headers,
});
});
}
Вот конкретная ошибка, которую я вижу:
Ошибка: ошибка протокола (Fetch.continueRequest): неверные заголовки параметров: ожидается массив
Как я могу устранить эту ошибку и успешно изменить request.headers
? Это глупая проблема с синтаксисом Javascript/Typescript, которую я просто не могу понять?
1 ответ
Решение
Fetch.requestPaused
возвращает заголовки как объект. например:
{
"Upgrade-Insecure-Requests":"1",
"Accept": "text/html,application/xhtml+xml"}
}
Fetch.continueRequest
ожидает Array<{name: string, value: string}>
, например
[
{"name": "Accept", value: "text/html,application/xhtml+xml"}
]
Вы можете использовать код, который использует Puppeteer:
function headersArray(headers) {
const result = [];
for (const name in headers) {
if (!Object.is(headers[name], undefined))
result.push({name, value: headers[name] + ''});
}
return result;
}