Как прокси-конкретный запрос в Puppeteer

#javascript #node.js #proxy #puppeteer

#javascript #node.js #прокси #puppeteer

Вопрос:

есть ли способ прокси / перенаправления определенных URL-адресов другим? например, когда страница Puppeteer переходит на «mydomain.com » я бы хотел , чтобы все звонки … «mydomain.com/styles/.css » быть проксированным на «localhost:8080/styles/.css». Я не хочу, чтобы все запросы перенаправлялись через прокси. но что-то похожее на то, что https://chrome.google.com/webstore/detail/resource-override/pkoacgokdfckfpndoffpifphamojphii?hl=en расширение Chrome делает это.

Комментарии:

1. Это может помочь, он использует опцию для просмотра исходного кода страницы, поэтому css / изображения не загружаются. github.com/GoogleChrome/puppeteer/issues/1913

Ответ №1:

поскольку @Hellonearthis связан, решение, похоже,

 const page = await browser.newPage();

await page.setRequestInterception(true);

page.on('request', (request) => {
  if (request.url().indexOf("mydomain.com") !== -1) {
    // simply replace with another url
    request.continue((request.url().replace("mydomain.com", "http://localhost:8080/styles"));
  }
  else {
    request.continue();
  }
 

});

Ответ №2:

Для puppeteersharp мне потребовалось некоторое время, чтобы понять это.

 page = await ChromeDriver.NewPageAsync();
await page.SetRequestInterceptionAsync(true);
page.Request  = new EventHandler<RequestEventArgs>(async delegate (object o, RequestEventArgs a)
{
    if (a.Request.Url.StartsWith("mydomain.com"))
    {
        await a.Request.ContinueAsync(new Payload
        {
            Headers = a.Request.Headers,
            Method = a.Request.Method,
            PostData = a.Request.PostData != null ? a.Request.PostData.ToString() :  "",
            Url = a.Request.Url.Replace("mydomain.com", "http://localhost:8080")
        });
    }
    else
    {
        await a.Request.ContinueAsync();
    }
});