Uma ferramenta CLI poderosa para fazer requisições HTTP usando sintaxe JavaScript pura!
O requrl (também conhecido como jsurl) é uma ferramenta de linha de comando que permite fazer requisições HTTP usando JavaScript diretamente no terminal. Ao invés de decorar sintaxes complexas de cURL ou usar ferramentas com configurações verbosas, você pode usar JavaScript puro e familiar!
- 🎯 Sintaxe JavaScript familiar - Use
await, objetos, arrays, tudo que você já conhece - 🚀 Rápido e direto - Execute requisições complexas em uma única linha
- 🎨 Saída colorida e formatada - Resultados bonitos e legíveis no terminal
- 🔧 Flexível - Suporta todos os métodos HTTP (GET, POST, PUT, DELETE, PATCH)
- 📦 Zero dependências - Usa apenas APIs nativas do Node.js
Se você clonou ou baixou este repositório, pode instalar localmente:
# Usando npm
npm link
# Ou usando bun
bun linkIsso criará os comandos requrl e jscurl globalmente apontando para este diretório.
npm install -g @purecore/requrlOu usando bun:
bun install -g @purecore/requrlVocê também pode usar diretamente com Node.js:
node requrl.js "await req.get('https://api.github.com/users/octocat')"Após a instalação, você pode usar o comando jscurl ou requrl:
# GET simples
jscurl "await req.get('https://api.github.com/users/octocat')"
# POST com body
jscurl "await req.post('https://api.example.com/users', { name: 'João', age: 30 })"
# Com headers customizados
jscurl "await req.get('https://api.example.com/data', { headers: { 'Authorization': 'Bearer token123' } })"jscurl "await req.get('https://jsonplaceholder.typicode.com/posts/1')"jscurl "await req.post('https://jsonplaceholder.typicode.com/posts', { title: 'Meu Post', body: 'Conteúdo do post', userId: 1 })"jscurl "await req.put('https://jsonplaceholder.typicode.com/posts/1', { id: 1, title: 'Título Atualizado', body: 'Novo conteúdo', userId: 1 })"jscurl "await req.delete('https://jsonplaceholder.typicode.com/posts/1')"jscurl "await req.patch('https://jsonplaceholder.typicode.com/posts/1', { title: 'Apenas título atualizado' })"jscurl "await req.get('https://api.github.com/user', { headers: { 'Authorization': 'token ghp_xxxxxxxxxxxx', 'Accept': 'application/vnd.github.v3+json' } })"jscurl "await req.get('https://api.example.com/data', { headers: { 'X-Custom-Header': 'valor' }, redirect: 'follow' })"O requrl funciona de forma inteligente e elegante:
- Parser de Código JavaScript: O comando recebe uma string contendo código JavaScript válido
- AsyncFunction: Usa
AsyncFunctiondo JavaScript para executar código assíncrono dinamicamente - Objeto
req: Expõe métodos HTTP simplificados (get,post,put,delete,patch) - Fetch API Nativa: Utiliza a API
fetchnativa do Node.js (disponível a partir do Node.js 18+) - Formatação Inteligente: Detecta automaticamente o tipo de conteúdo e formata a resposta (JSON ou texto)
- Saída Colorida: Usa códigos ANSI para colorir e formatar a saída no terminal
┌─────────────────┐
│ Terminal CLI │
│ (jscurl cmd) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Code Parser │
│ (AsyncFunction) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ req Object │
│ (HTTP Methods) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Fetch API │
│ (Native Node) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Formatter │
│ (Colors/JSON) │
└─────────────────┘
Você pode testar a ferramenta com APIs públicas:
# Teste com JSONPlaceholder
jscurl "await req.get('https://jsonplaceholder.typicode.com/posts/1')"
# Teste com GitHub API
jscurl "await req.get('https://api.github.com/users/octocat')"
# Teste POST
jscurl "await req.post('https://jsonplaceholder.typicode.com/posts', { title: 'Test', body: 'Test body', userId: 1 })"A ferramenta retorna um objeto padronizado:
{
status: 200,
statusText: 'OK',
headers: { /* todos os headers da resposta */ },
data: { /* corpo da resposta (JSON ou texto) */ }
}Em caso de erro, a resposta incluirá:
{
error: "Mensagem de erro descritiva"
}- Node.js 18+ (para suporte nativo ao
fetch) - npm ou bun
jscurl/
├── requrl.js # Código principal
├── package.json # Configurações do pacote
└── README.md # Este arquivo
O requrl foi desenvolvido com foco em simplicidade e poder:
- Shebang Line:
#!/usr/bin/env nodepermite executar o arquivo diretamente - Bin Configuration: O
package.jsondefine os comandosrequrlejscurlno campobin - AsyncFunction: Permite executar código JavaScript assíncrono dinamicamente, incluindo
await - Fetch API: Aproveita a API
fetchnativa do Node.js 18+, eliminando dependências externas - Detecção de Tipo: Analisa o header
Content-Typepara decidir entreJSON.parse()outext() - Cores ANSI: Implementa um sistema simples de cores para melhorar a legibilidade
- ✅ Zero Dependencies: Usa apenas APIs nativas do Node.js
- ✅ ES Modules: Suporta
import/export(tipo: "module") - ✅ Type Detection: Detecta automaticamente JSON vs texto
- ✅ Error Handling: Tratamento robusto de erros com mensagens claras
- ✅ Flexible Options: Suporta todas as opções do
fetchAPI
Faz uma requisição GET.
Parâmetros:
url(string): URL da requisiçãooptions(object, opcional): Opções adicionais (headers, etc.)
Exemplo:
jscurl "await req.get('https://api.example.com/data', { headers: { 'Authorization': 'Bearer token' } })"Faz uma requisição POST.
Parâmetros:
url(string): URL da requisiçãobody(any, opcional): Corpo da requisição (será convertido para JSON se for objeto)options(object, opcional): Opções adicionais
Exemplo:
jscurl "await req.post('https://api.example.com/users', { name: 'João' })"Faz uma requisição PUT.
Faz uma requisição DELETE.
Faz uma requisição PATCH.
Contribuições são bem-vindas! Sinta-se à vontade para:
- Fazer fork do projeto
- Criar uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m '✨ feat: Adiciona AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abrir um Pull Request
Veja todas as mudanças no CHANGELOG.md.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
suissAI
- Node.js pela API
fetchnativa - Comunidade JavaScript por toda a inspiração
- Todos os contribuidores que ajudam a melhorar este projeto
- Node.js Fetch API Documentation
- MDN Web Docs - Fetch API
- npm Package.json Bin Field
- ANSI Color Codes
⭐ Gostou do projeto? Dê uma estrela! ⭐
