Skip to content

Instantly share code, notes, and snippets.

@s3rgeym
Created April 18, 2019 07:04
Show Gist options
  • Save s3rgeym/bddff6a0a1c4a4950388df344eea9157 to your computer and use it in GitHub Desktop.
Save s3rgeym/bddff6a0a1c4a4950388df344eea9157 to your computer and use it in GitHub Desktop.
// https://stackoverflow.com/questions/33106709/chrome-webrequest-doesnt-see-post-data-in-requestbody
// https://developer.chrome.com/extensions/webRequest
const wsUrl = 'ws://localhost:8192/ws'
const requestFilter = { urls: ['<all_urls>'] }
const requests = new Map()
let ws
// -function connect() {
// ws = new WebSocket(wsUrl)
// ws.onopen = () => {
// console.log('соединение с вебсокет-сервером установлено')
// }
// ws.message = e => {
// // Пока необходимости в получении ответов от сервера нет
// console.log(e.data)
// }
// ws.onclose = () => {
// console.log('Соединение закрыто')
// setTimeout(connect, 3000)
// }
// }()
// bytearray.fromhex('deadbeef')
function bytesToHex(a) {
return new Uint8Array(a).reduce(
(acc, v) => acc += v.toString(16).padStart(2, '0'),
''
)
}
chrome.webRequest.onBeforeRequest.addListener(
({ requestId, method, url, requestBody, timeStamp }) => {
console.log('requests.size: ' + requests.size)
requests.set(requestId, {
id: requestId,
startTime: timeStamp,
method,
url,
body: requestBody
})
},
requestFilter,
['requestBody']
)
chrome.webRequest.onBeforeSendHeaders.addListener(
({ requestId, requestHeaders }) => {
const request = requests.get(requestId)
Object.assign(request, { headers: requestHeaders })
},
requestFilter,
['requestHeaders']
)
chrome.webRequest.onCompleted.addListener(
({ requestId, responseHeaders, statusCode, timeStamp }) => {
const request = requests.get(requestId)
// удаляем запрос
requests.delete(requestId)
const { body } = request
if (body !== undefined) {
if ('raw' in body) {
for (const item of body.raw) {
if ('bytes' in item) {
item.bytes = bytesToHex(item.bytes)
}
}
}
}
const message = JSON.stringify({
...request,
response: {
status: statusCode,
headers: responseHeaders
},
endTime: timeStamp
})
console.log(message)
// ws.send(message)
},
requestFilter,
['responseHeaders']
)
chrome.webRequest.onErrorOccurred.addListener(
({ requestId }) => {
requests.delete(requestId)
},
requestFilter
)
@s3rgeym
Copy link
Author

s3rgeym commented Apr 18, 2019

manifest.json:

{
  "manifest_version": 2,
  "name": "interceptor",
  "version": "0.1.0",
  "author": "self",
  "background": {
    "persistent": true,
    "scripts": ["background.js"]
  },
  "permissions": [
    "webRequest",
    "<all_urls>"
  ]
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment