const { fetch } = require('puppeteer');
async function interceptRequestAndFulfillWithBinaryData(page, url, binaryData) {
// Intercept network requests
await page.setRequestInterception(true);
page.on('request', interceptedRequest => {
if (interceptedRequest.url() === url) {
// Fulfill the request with binary data converted to base64
const base64Data = Buffer.from(binaryData).toString('base64');
interceptedRequest.respond({
status: 200,
contentType: 'application/octet-stream', // Set the appropriate content type
body: base64Data,
});
} else {
interceptedRequest.continue();
}
});
// Navigate to a page that triggers the request
await page.goto('https://example.com');
// Disable request interception after fulfilling the request
await page.setRequestInterception(false);
}
// Example usage
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Replace 'url' and 'binaryData' with your actual values
const url = 'https://example.com/your-file';
const binaryData = /* Your binary data here */;
await interceptRequestAndFulfillWithBinaryData(page, url, binaryData);
// Close the browser after the download is initiated
await browser.close();
})();
字符串 在本例中,interceptRequestAndFulfillWithBinaryData函数拦截指定的URL,将二进制数据转换为base64编码的字符串,并使用base64编码的数据完成请求。请注意,您应该根据所提供的数据类型设置适当的contentType。 请记住,将二进制数据转换为base64会增加数据大小,因此这不是最有效的方法,特别是对于大文件。如果可能,请考虑使用其他方法直接提供二进制数据,例如在服务器响应中设置适当的头以触发文件下载。 如需更深入的学习,并随时了解您的技术堆栈,请考虑JavaScript Weekly和Web Development Weekly。
1条答案
按热度按时间jmo0nnb31#
在Chrome DevTools协议(CDP)中,当使用Fetch.fulfillRequest方法时,body参数实际上只支持base64编码的数据。此限制是由于CDP中的响应主体预期为base64编码的字符串。
但是,您仍然可以通过将二进制数据转换为base64编码的字符串来完成二进制数据的请求。您可以使用JavaScript中的btoa函数来实现此转换。下面是一个示例:
字符串
在本例中,interceptRequestAndFulfillWithBinaryData函数拦截指定的URL,将二进制数据转换为base64编码的字符串,并使用base64编码的数据完成请求。请注意,您应该根据所提供的数据类型设置适当的contentType。
请记住,将二进制数据转换为base64会增加数据大小,因此这不是最有效的方法,特别是对于大文件。如果可能,请考虑使用其他方法直接提供二进制数据,例如在服务器响应中设置适当的头以触发文件下载。
如需更深入的学习,并随时了解您的技术堆栈,请考虑JavaScript Weekly和Web Development Weekly。