Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using HTTP.Servers
- using HTTP.Messages
- requests_per_ip = Dict{String, Int64}()
- max_requests = 5
- timeout = 60
- function handle_request(req::Request)
- remote_ip = HTTP.peeraddr(req)[1]
- if get(requests_per_ip, remote_ip, 0) >= max_requests
- return HTTP.Messages.Response(429, "Too Many Requests")
- end
- #redefinir as contagens se passou um determinado tempo
- if get(requests_per_ip, remote_ip, 0) > 0 && time() - requests_per_ip[remote_ip] > timeout
- requests_per_ip[remote_ip] = 0
- end
- requests_per_ip[remote_ip] = get(requests_per_ip, remote_ip, 0) + 1
- #log
- println("IP: $remote_ip - Número de solicitações: $(requests_per_ip[remote_ip])")
- #verificar se o caminho da solicitação é "/stats"
- if HTTP.path(req) == "/stats"
- #gerar uma resposta com as estatísticas de solicitações por IP
- stats = join([("$ip: $(requests_per_ip[ip])") for ip in keys(requests_per_ip)], "\n")
- return HTTP.Messages.Response(200, stats)
- end
- return HTTP.Messages.Response(200, "OK")
- end
- server = HTTP.Servers.Server(8000, handle_request)
- HTTP.Servers.run(server)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement