# CURL

cURL (pronunciato "curl", /kɜːrl/) è un software che fornisce una libreria (libcurl) e una interfaccia da linea di comando (curl), utilizzabili per trasferire dati e file tramite numerosi protocolli. Il nome significa "Client per URL" ("Client for URL" in inglese).

## Storia

La prima versione di cURL è stata pubblicata nel 1996. Il suo nome originariamente era httpget, diventato poi urlget, prima dell'adozione del nome attuale curl. L'autore e sviluppatore principale è lo sviluppatore svedese Daniel Stenberg, che ha creato questo software per automatizzare il recupero dei tassi di cambio valuta per gli utenti di IRC.

## libcurl

libcurl è una libreria lato client per trasferimento dati tramite URL, che supporta cookie, DICT, FTP, FTPS, Gopher, HTTP/1 (con supporto per HTTP/2 e HTTP/3), HTTP POST, HTTP PUT, proxy tunneling HTTP, HTTPS, IMAP, Kerberos, LDAP, MQTT, POP3, RTSP, RTMP, SCP, SMTP, e SMB. La libreria supporta lo schema URI file, SFTP, Telnet, TFTP, ripresa del trasferimento del file, caricamento FTP, caricamento HTTP basato sui form, certificati HTTPS, LDAPS, proxy e autenticazione utente con password.
La libreria libcurl è portabile. Può essere compilato e funzionare in maniera identica su numerose piattaforme, come AIX, AmigaOS, Android, BeOS, BlackBerry Tablet OS e BlackBerry 10, OpenVMS, Darwin, DOS, FreeBSD, HP-UX, HURD, iOS, IRIX, Linux, macOS, NetBSD, NetWare, OpenBSD, OS/2, QNX Neutrino, RISC OS, Solaris, Symbian, Tru64, Ultrix, UnixWare, Microsoft Windows e OpenHarmony.
La libreria libcurl è open source, thread-safe e compatibile con IPv6. Sono disponibili associazioni per oltre 50 linguaggi, tra cui C/C++, Java, Julia (in bundle), PHP e Python.
La libreria libcurl supporta GnuTLS, mbed TLS, NSS, gskit su IBM i, SChannel su Windows, Secure Transport su macOS e iOS, SSL/TLS attraverso OpenSSL, BoringSSL, libreSSL, AmiSSL, wolfSSL, BearSSL e rustls.

## curl

curl è uno strumento da linea di comando per ottenere o inviare dati, inclusi file, usando una sintassi URL. Dato che curl utilizza libcurl, supporta tutti i protocolli supportati da libcurl.
curl supporta HTTPS e verifica di default i certificati SSL quando è specificato un protocollo sicuro, come HTTPS. Quando curl si connette ad un server remoto tramite HTTPS, riceve il certificato del server, e lo controlla tramite i suoi certificati CA per verificare che il server sia quello che dichiara di essere. Alcuni pacchetti di curl sono in bundle con file di certificati CA. Ci sono numerose opzioni per specificare un certificato CA, come --cacert e --capath. L'opzione --cacert può essere usata per specificare la posizione del file del certificato CA. Su Windows, se un file di certificato CA non è specificato, curl cercherà un certificato CA con nome “curl-ca-bundle.crt” nelle seguenti cartelle nell'ordine indicato:
* Cartella in cui il software curl è situato.
* Cartella corrente.
* Cartella di sistema Windows.
* Cartella di Windows.
* Cartelle elencate nella variabile d'ambiente %PATH%.
curl genererà un messaggio di errore se il server remoto usa un certificato autofirmato, o se il server remoto non ha un certificato firmato da una CA presente nel file dei certificati CA. Le opzioni -k o --insecure possono essere usate per saltare la verifica del certificato. In alternativa, se il server remoto è fidato, il certificato CA del server può essere aggiunto al file dei certificati CA.

## Esempi

Un uso di base di curl richiede semplicemente scrivere curl sulla linea di comando, seguito dall'URL da richiedere:
curl di default mostra ciò che riceve dall'URL sullo standard output del sistema (solitamente la finestra del terminale). Quindi eseguire il comando qui sopra, sulla maggior parte dei sistemi, mostrerebbe il codice sorgente di www.example.com nella finestra del terminale. L'opzione -o può essere usata per memorizzare l'output in un file:
Sono disponibili inoltre altre opzioni che modificano il comportamento di curl.