3 pontos por GN⁺ 2024-01-30 | 1 comentários | Compartilhar no WhatsApp

Usando --libcurl

  • Recomendação de uso do libcurl: Recomenda-se que os usuários primeiro usem a ferramenta de linha de comando curl para testar a transferência desejada e, quando ela estiver funcionando aproximadamente como esperado, executem novamente adicionando a opção --libcurl [nome_do_arquivo] à linha de comando.
  • Geração de código: A opção de linha de comando --libcurl gera um programa em C com o nome de arquivo fornecido. Esse programa em C usa libcurl para executar a transferência realizada pela ferramenta de linha de comando curl.
  • Exceções e diferenças: Nem sempre há correspondência 100%, mas isso pode servir como uma excelente inspiração para as opções do libcurl e argumentos adicionais que você queira usar.

Código de exemplo

  • Exemplo de execução: Ao executar o comando curl http://example.com --libcurl example.c, o arquivo example.c é criado no diretório atual.
  • Código gerado: O código gerado inclui várias configurações de opções usando curl_easy_setopt(), e algumas opções não podem ser facilmente geradas a partir da fonte, então o usuário talvez precise implementá-las manualmente ou optar por não usá-las.

Opinião do GN⁺

  • Utilidade do libcurl: Esse recurso permite que desenvolvedores convertam facilmente, em um programa C, comandos curl que funcionam na linha de comando, acelerando o desenvolvimento de aplicações que usam libcurl.
  • Vantagens da geração de código: O código gerado automaticamente pode ajudar desenvolvedores a entender e aplicar a API do libcurl mais rapidamente.
  • Valor como ferramenta de aprendizado: Pode ser um ótimo material de aprendizado para engenheiros de software iniciantes, ao mostrar opções do libcurl e casos reais de aplicação em programação de rede.

1 comentários

 
GN⁺ 2024-01-30
Opiniões do Hacker News
  • O padrão de encontrar a requisição desejada na aba Network das ferramentas de desenvolvedor do navegador, copiar com “copy as curl” e depois converter para código de requisição na linguagem usada com uma ferramenta como https://curlconverter.com/ é muito bom
    De certa forma, o curl funciona como uma representação intermediária que pode ser traduzida para qualquer lugar

    • Usuários de R podem transformar um comando “copy as curl” em código de requisição com a função curl_translate do pacote httr2, uma reescrita recente do httr
      https://httr2.r-lib.org/reference/curl_translate.html
    • O curlconverter.com parece bom o bastante para ir direto para os favoritos
      O “copy as curl” do navegador já vem em um estado em que autenticação e headers de codificação com certeza funcionam, então é muito mais conveniente do que ficar ajustando manualmente um comando curl de várias linhas
    • Ficou muito mais fácil solucionar problemas em endpoints de API
      Dá para alterar parâmetros da requisição e disparar contra uma instância local, ou encaminhar para jq e refinar o formato da saída
    • É uma observação muito correta que, quando um endpoint não funciona, o primeiro passo vira “funciona com curl?
    • O HTTP em si não precisa de uma representação intermediária, mas, por causa da universalidade do cURL, ele acaba funcionando assim na prática
      Como é usado de forma tão ampla, surgem ferramentas que exportam requisições como cURL e também ferramentas que importam cURL
  • É bem legal uma interface de linha de comando ter uma flag que cospe código-fonte de programa que faz a mesma coisa que o comando atual
    Dá a sensação de abrir o capô e mostrar o que está acontecendo por dentro; além de ajudar a entender melhor o funcionamento, também facilita modificar ou estender conforme a necessidade

    • Também é excelente como documentação de biblioteca de programação
      Se você estiver usando libcurl e precisar de algo como requisições de intervalo, ou tiver feito “copy as curl” na aba Network do navegador, pode executar na linha de comando e acrescentar --libcurl para saber exatamente como fazer isso com a biblioteca C
    • Seria bom se essa abordagem também fosse aplicada às configurações do Gnome, configurações de rede, GUIs de configuração de firewall e qualquer coisa que possa operar por comandos CLI
  • Essa abordagem foi uma das razões do sucesso das macros do Visual Basic no Microsoft Office
    Você podia executar uma ação no Word ou Excel, ver a macro gerada e depois ajustar o código conforme a necessidade. É um conceito simples e poderoso, então é bom vê-lo também no curl

    • A Microsoft também criou uma ferramenta útil parecida, que permite examinar a estrutura de um documento específico do Office e ver o código C# que gera seus componentes
      Parece que não é atualizada há bastante tempo: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
    • Deve haver um padrão generalizado para esse tipo de coisa
      O AREXX do Amiga também vem à mente
    • O XAML/UI paralelo do lado do Excel que se via no editor WPF do Visual Studio também vem à mente de forma parecida
  • Para compilar, é preciso informar ao gcc o link com a libcurl, por exemplo acrescentando -lcurl
    Por exemplo, rode curl https://ifconfig.me --libcurl ip_fetcher.c para obter o endereço IP e criar ip_fetcher.c; compile com gcc -o ip_fetcher ip_fetcher.c -lcurl; depois execute ./ip_fetcher e o endereço IP será exibido
    Para quem não usa C todos os dias, até essa etapa básica de linkagem é uma informação útil

    • Se make for mais conveniente do que digitar o comando cc diretamente, há uma forma ainda mais fácil
      Depois de curl https://ifconfig.me --libcurl ip_fetcher.c, execute make LDFLAGS=-lcurl ip_fetcher e então ./ip_fetcher
  • Fazendo um pouco de divulgação, Hurl é uma CLI open source que usa libcurl para executar e testar requisições HTTP em texto puro
    Ela usa a alta confiabilidade da libcurl e recursos como HTTP/3, e acrescenta conexão entre requisições, captura de dados da resposta para repassar à próxima requisição e testes de resposta como JSONPath e XPath
    Também há açúcar sintático para requisições de APIs REST/SOAP/GraphQL, mas o núcleo é simplesmente libcurl; com a opção verbose, também dá para grep em comandos curl. Participo como mantenedor
    https://hurl.dev

  • Seria bom se esse recurso também fosse possível no ffmpeg

  • Daniel Stenberg cuida dos detalhes e da experiência de desenvolvedores e usuários de forma realmente minuciosa
    Esse nível de polimento é impressionante

  • Lembro que o próprio Daniel Stenberg mencionou essa opção em um vídeo de 3 horas em que percorre a maioria das opções de linha de comando do curl
    https://www.youtube.com/watch?v=V5vZWHP-RqU

  • O título enviado deveria usar dois hífens (--), não uma combinação de travessão de largura cheia e hífen (—-)

    • Se enviar um e-mail ao operador pelo link Contact no rodapé, ele pode ver isso e corrigir
  • Isso significa que essa opção gera um programa C compilável que pode substituir um script que envolve a chamada curl original?

    • Sim. Com libcurl isso já era possível, mas até agora era preciso escrever o código boilerplate manualmente
    • A ideia é poder copiar e colar o código C gerado em um programa existente ou, no mínimo, usá-lo como referência para verificar quais chamadas da API da libcurl são necessárias para reproduzir aquela chamada curl
    • Para ser útil em páginas web comuns e coisas do tipo, é bem provável que seja preciso modificar alguns parâmetros
      O melhor é encarar isso como um ponto de partida que evita passar horas vasculhando a documentação