Utilisation de curl pour télécharger publier des données avec les fichiers
Je voudrais utiliser cURL pour ne pas les envoyer uniquement les paramètres de données en POST HTTP, mais aussi de télécharger des fichiers avec la forme spécifique de nom. Comment dois-je faire ?
HTTP paramètres Post:
userid = 12345
filecomment = C'est un fichier image
HTTP upload de Fichier:
Emplacement du fichier = /home/user1/Desktop/test.jpg
Forme de nom de fichier = image (correspondent à la variable $_FILES['image'] en PHP côté)
J'ai compris une partie de la boucle de commande comme suit:
curl -d "userid=1&filecomment=This is an image file" --data-binary @"/home/user1/Desktop/test.jpg" localhost/uploader.php
Le problème que je reçois est comme suit:
Notice: Undefined index: image in /var/www/uploader.php
Le problème est que je suis en utilisant la variable $_FILES['image'] pour sélectionner les fichiers dans le script PHP.
Comment puis-je régler mon cURL commandes en conséquence ?
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le
-F
option:-F/--form <name=content> Specify HTTP multipart POST data (H)
Essayez ceci:
-d
option par erreur, ce qui nécessite l'entrée d'URL-encodé. Je devrais avoir enlevé que lorsque j'ai mis à jour la réponse à la-F
option. Merci pour la capture de que.-F
argument pour chaque fichier que vous souhaitez envoyer.-F
les arguments doivent être un chemin d'accès local sur le serveur ou peut-il être un fichier accessible sur un serveur distant commehttp://www.example.com/path/to/some/image.jpg
?@
dansimage=@/..
?La capture de l'id de l'utilisateur en tant que variable de chemin d'accès (recommandé):
La capture de l'id de l'utilisateur dans le cadre de la forme:
ou:
"Content-Type: multipart/form-data"
Voici ma solution, j'ai lu beaucoup de messages et ils ont été vraiment utiles. Enfin, j'ai écrit du code pour les petits fichiers, avec cURL et PHP que je pense que c'est vraiment utile.
Avec ce que nous devrions être sur la "api.point de terminaison.après" la suite de vars posté. Vous pouvez facilement tester avec ce script, et vous devriez recevoir ce débogue sur la fonction
postFile()
à la dernière ligne.Cela devrait bien fonctionner, ils peuvent être de meilleures solutions, mais cela fonctionne, et il est très utile de comprendre comment la Frontière et multipart/de-mime de données fonctionne sur PHP et cURL à la bibliothèque.
si vous êtes le téléchargement de fichiers binaires tels que csv, utilisez format ci-dessous pour télécharger le fichier
--data-binary
chargecurl
à pas faire aucun pré-traitement des données, par opposition à--data
drapeau. pour répondre à votre commentaire directement, notez que le texte est aussi binaire, mais on peut l'interpréter comme des caractères ASCII. Si vous voulez vraiment un distinct exemple, que penser d'un CSV dont les champs contiennent des emoji. Leur octets ne sont pas directement de la carte de texteIci est de savoir comment correctement échapper à l'arbitraire des noms de fichier des fichiers téléchargés avec
bash
:Comme une alternative à
curl
, vous pouvez utiliser HTTPie, il a de la CLI, cURL-comme outil pour l'homme.Les instructions d'Installation: https://github.com/jakubroztocil/httpie#installation
Ensuite, exécutez: