Перехватить тело запроса HTTP из расширения chrome
Я знаю, что chrome.webRequest.onBeforeRequest
позволяет перехватывать, анализировать и блокировать запрос, но он разрешает доступ к заголовкам запроса, а не к телу запроса (насколько я знаю).
Пример использования: считать перехватывание значений формы.
Кажется, здесь есть предложение об изменении API , предлагающее именно это.
Есть ли другой способ сделать это?
Спасибо.
Ответы
Ответ 1
Теперь эта функциональность была добавлена в API, см. документацию .
Чтобы получить доступ к телу, вам необходимо сделать следующее:
chrome.webRequest.onBeforeRequest.addListener(
function(details)
{
console.log(details.requestBody);
},
{urls: ["https://myurlhere.com/*"]},
['requestBody']
);
Ответ 2
В то время как вы не можете перехватить, вы можете использовать стандартный подход AJAX для записи на ленту. Вместо того чтобы сделать запрос href посмотреть, можно ли сделать асинхронный вызов и сохранить его в HTML-объект, который не представлен. Затем очистите/прочитайте/проанализируйте/независимо от ваших критериев тела, и если он пройдет, нажмите этот объект тела обратно на текущее окно/страницу.
Сохранение содержимого в подавленном элементе, а затем использование этого же элемента для содержимого позволит избежать дублирования вызовов. Недостатком является то, что вы получите полный контент для вещей, которые вы не сможете использовать. Это может быть или не быть проблемой пропускной способности/скорости.
Ответ 3
Вот что я сделал
- Я использовал
requestBody
для получения тела почтовых запросов. - Я использовал
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"]
);