Подтвердить что ты не робот

Расширения Chrome. Другие способы читать тела ответов, чем chrome.devtools.network?

Я хотел бы прочитать (не изменять) тело ответа для всех запросов, соответствующих шаблону в расширении Chrome. В настоящее время я использую chrome.devtools.network.onRequestFinished, который дает вам объект Request с помощью метода getContent(). Это работает отлично, но, конечно же, требует, чтобы devtools были открыты для продолжения работы. В идеале расширение будет всплывающим, но chrome.webRequest.onCompleted, похоже, не дает доступа к телу ответа. Существует запрос функции, чтобы позволить API WebRequest редактировать тела ответа - но может ли webRequest даже прочитать их? Если нет, есть ли другой способ прочитать тела ответа вне расширений devtools?

4b9b3361

Ответ 1

Запрос функции, на который вы ссылаетесь, подразумевает, что поддержка чтения также не поддерживается:

К сожалению, этот запрос не тривиален. (...) Что касается чтения тела ответа: это сложно с точки зрения производительности. (...) Так что в целом, это просто нелегко достичь...

Так что нет, похоже, у расширения нет доступа к телам сетевых ответов, кроме devtools.

Ответ 2

Вот что я сделал

  1. Я использовал chrome.webRequest & requestBody для получения тела почтовых запросов
  2. Я использовал decoder разобрать тело в строку

Вот пример

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        if(details.method == "POST")
        // Use this to decode the body of your post
            var postedString = decodeURIComponent(String.fromCharCode.apply(null,
                                      new Uint8Array(details.requestBody.raw[0].bytes)));
           console.log(postedString)

    },
    {urls: ["<all_urls>"]},
    ["blocking", "requestBody"]
);

Ответ 3

Если у вас есть этот шаблон запросов, вы можете запустить что-то подобное в файле background.html:

    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://example.com/" + yourStringForPattern, true);
    xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      var body = xhr.responseText;
      // call some function to do something with the html body

    }
   }
   xhr.send();