I would like to intercept all http requests going out from my web page and add a parameter to the request body. My page includes forms - I also want to capture form submits. I have tried using Jquery ajaxSend and Javascript's setRequestHeader but both did not work for me. How do I achieve this?
Thanks
We found that between 4% and 10% of the web's encrypted traffic (HTTPS) is intercepted. Analyzing these intercepted connections further reveals that, while not always malicious, interception products most often weaken the encryption used to secure communication and puts users at risk.
Interceptors are code blocks that you can use to preprocess or post-process HTTP calls, helping with global error handling, authentication, logging, and more.
Your best option is to use a proxy on your server, and route the iframe request through there; re-writing all asset URL's through your proxy instead of direct access (but even then you have impossible edge cases to track, such as JavaScript including other assets etc etc.
https://developer.mozilla.org/en/docs/Web/API/Service_Worker_API
Service workers essentially act as proxy servers that sit between web applications, and the browser and network (when available).
It takes the form of a JavaScript file that can control the web page/site it is associated with, intercepting and modifying navigation and resource requests
You register a service worker in your application code from a file named, e.g., sw.js
by doing:
if ('serviceWorker' in navigator) { window.addEventListener('load', function() { navigator.serviceWorker.register('sw.js').then(function(registration) { console.log('Service worker registered with scope: ', registration.scope); }, function(err) { console.log('ServiceWorker registration failed: ', err); }); }); }
And in the sw.js
file (the actual service-worker code): To intercept requests, you attach a fetch
event listener to the service worker that calls the respondWith()
method and does something with the .request
member from the event object:
self.addEventListener('fetch', function(event) { event.respondWith( // intercept requests by handling event.request here ); });
A simple service worker that just passes through requests unchanged looks like this:
self.addEventListener('fetch', function(event) { event.respondWith( fetch(event.request) ); });
To add a param to the request body, you need to:
fetch(…)
with that new request.So, a service worker that does all that would look like this (untested):
self.addEventListener('fetch', function(event) { event.respondWith( fetchWithParamAddedToRequestBody(event.request) ); }); function fetchWithParamAddedToRequestBody(request) { serialize(request).then(function(serialized) { // modify serialized.body here to add your request parameter deserialize(serialized).then(function(request) { return fetch(request); }); }); // fixed this } function serialize(request) { var headers = {}; for (var entry of request.headers.entries()) { headers[entry[0]] = entry[1]; } var serialized = { url: request.url, headers: headers, method: request.method, mode: request.mode, credentials: request.credentials, cache: request.cache, redirect: request.redirect, referrer: request.referrer }; if (request.method !== 'GET' && request.method !== 'HEAD') { return request.clone().text().then(function(body) { serialized.body = body; return Promise.resolve(serialized); }); } return Promise.resolve(serialized); } function deserialize(data) { return Promise.resolve(new Request(data.url, data)); }
Note: https://serviceworke.rs/request-deferrer_service-worker_doc.html, a page from the Service Worker Cookbook, is where I lifted that serialize(…)
code/approach from—by way of the answer at https://stackoverflow.com/questions/35420980/how-to-alter-the-headers-of-a-request/35421644#35421644—and it’s worth taking a look at, because the code there has detailed annotations explaining what it’s all doing
try this code :
(function(send) { XMLHttpRequest.prototype.send = function(data) { var _valuToAdd = $("input[name='valuToAdd']").val(); this.setRequestHeader('valueName', _valuToAdd); send.call(this, data); }; })(XMLHttpRequest.prototype.send);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With