O Nodeunblocker não é apenas uma solução de proxy personalizada, mas permite a interceção e alteração de pedidos de saída e de entrada através de middleware.
Podemos usar esta funcionalidade para bloquear o carregamento de recursos específicos com base no tipo de recurso ou domínio, atualizar o agente do utilizador, substituir o conteúdo devolvido ou injetar tokens de autenticação nos cabeçalhos das solicitações.
Pode encontrar uma lista completa de exemplos aqui.
Vamos começar por criar um middleware para definir um agente de utilizador personalizado. Crie um ficheiro chamado user-agent.js e adicione este código ao mesmo:
module.exports = function(userAgent) {
function setUserAgent(data) {
data["headers"]["user-agent"] = userAgent
}
return setUserAgent
}
Esta função aceita o agente de utilizador personalizado com o parâmetro userAgent e regista-o no objeto de dados utilizando a função setUserAgent. O Node Unblocked chamará a função setUserAgent em cada pedido.
const userAgent = require('./user-agent')
Definimos o parâmetro requestMiddleware no construtor do Unblocker e estamos prontos para avançar.
const unblocker = new Unblocker({
prefix: '/proxy/',
requestMiddleware: [userAgent("nodeunblocker/1.5")]
})
O nosso ficheiro index.js deve ficar assim:
const express = require('express')
const Unblocker = require('unblocker')
const userAgent = require('./user-agent')
const app = express()
const port = 8080
const unblocker = new Unblocker({
prefix: '/proxy/',
requestMiddleware: [userAgent("nodeunblocker/1.5")]
})
app.use(unblocker)
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(process.env.PORT || 8080, () => {
console.log(`Example app listening on port ${port}`)
}).on('upgrade', unblocker.onUpgrade)
É hora de verificar se o nosso código funciona. Temos de alterar o URL do node-unblocker para garantir que os cabeçalhos são atualizados corretamente.
Reinicie a aplicação e abra esta URL no seu navegador:
http://localhost:8080/proxy/https://www.whatsmyua.info/
Se o site exibir nodeunblocker/1.5, o nosso middleware funciona.