Curl für http Uploads benutzen
Da seit neuestem mein Binärstorage für meine Projekte online ging habe ich natürlich nach einer Möglichkeit gesucht, Dateien automatisch zu releasen und auf meine Page hochzuladen.
Eine eigene Implementierung war mir zu aufwendig, deshalb habe ich mich für curl entschieden da dies für die CLI einfach zu bedienen ist und die Parameter leicht mit jeder Scriptsprache zu generieren sind.
Genug der Vorworte, hier mal ein kleines Beispiel für einen einfachen Transfer:
curl -X POST -F "title=$sFilename" -F "fileXYZ=@TestFile.zip" https://coolcow.de/upload.php
Dieses Kommando simuliert ein Formular mit einem Inputfeld für title und einem file-input mit dem Namen fileXYZ,
Die empfangende Seite kann z.B. mit php die Datei so entgegen nehmen:
if(isset($_POST['title']) && isset($_FILES['fileXYZ']["tmp_name"]))
{
if(move_uploaded_file ($_FILES['fileXYZ']['tmp_name'], "/ZielPfad" ))
{
// File transfered, do what ever you want.
}
}
Weitere nützliche Parameter
Einige Parameter können Transfers noch etwas einfacher oder sicherer machen.
-k
Für meine Debug-Umgebung habe ich selbst generierte Zertifikate im Einsatz, welche natürlich als nicht vertrauenswürdig gelten und curl an der Ausführung hindern. Mit -k als Parameter werden auch unsichere Seiten akzeptiert.
--fail
Sehr nützliches Kommando wenn Fehler beim Transfer abgefangen und ausgewertet werden sollen.
Hiermit wird der HTTP-Return-Code der Seite ausgewertet so das curl mit einem ExitCode != 0
beendet wird.
Hintergrund ist, dass curl, auch wenn die Seite z.B. 404 meldet, keinen Fehler zurück gibt, da
curl selbst ja keinen Fehler gemacht hat.
BasicAuth
Wer die basic auth Methode auf Seiten einsetzt kann diese bei der URL mit angeben, z.B.:
curl -X POST -F "title=$sFilename" -F "fileXYZ=@TestFile.zip" https://username:password@coolcow.de/upload.php
Hier wird username und password als login Daten übergeben.