Biblioteca `libcurl`
(everything.curl.dev)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
--libcurlgera 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 arquivoexample.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
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
curl_translatedo pacote httr2, uma reescrita recente do httrhttps://httr2.r-lib.org/reference/curl_translate.html
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
Dá para alterar parâmetros da requisição e disparar contra uma instância local, ou encaminhar para
jqe refinar o formato da saídaComo é 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
Se você estiver usando
libcurle 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--libcurlpara saber exatamente como fazer isso com a biblioteca CEssa 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
Parece que não é atualizada há bastante tempo: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
O AREXX do Amiga também vem à mente
Para compilar, é preciso informar ao
gcco link com a libcurl, por exemplo acrescentando-lcurlPor exemplo, rode
curl https://ifconfig.me --libcurl ip_fetcher.cpara obter o endereço IP e criarip_fetcher.c; compile comgcc -o ip_fetcher ip_fetcher.c -lcurl; depois execute./ip_fetchere o endereço IP será exibidoPara quem não usa C todos os dias, até essa etapa básica de linkagem é uma informação útil
makefor mais conveniente do que digitar o comandoccdiretamente, há uma forma ainda mais fácilDepois de
curl https://ifconfig.me --libcurl ip_fetcher.c, executemake LDFLAGS=-lcurl ip_fetchere então./ip_fetcherFazendo 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 (—-)Isso significa que essa opção gera um programa C compilável que pode substituir um script que envolve a chamada curl original?
libcurlisso já era possível, mas até agora era preciso escrever o código boilerplate manualmenteO melhor é encarar isso como um ponto de partida que evita passar horas vasculhando a documentação