# Paf'Py Et PAF ! ## Envoyer un ou plusieurs fichiers En utilisant des requêtes `multipart/form-data` il est possible d'envoyer un fichier : ```bash $ curl http://localhost:8000/ -Fmanage.py=@manage.py | URL | size | filename | |-------------------------|--------|-----------| | https://p.afpy.org/g3LE | 251 | manage.py | ``` ou plusieurs fichiers en même temps : ```bash $ curl http://localhost:8000/ -Fmanage.py=@manage.py -Frequirements.txt=@requirements.txt | URL | size | filename | |-------------------------|--------|------------------| | https://p.afpy.org/g3LE | 251 | manage.py | | https://p.afpy.org/k4oT | 547 | requirements.txt | ``` C'est l'extension dans le nom du fichier qui permet de choisir la coloration syntaxique pour chaque fichier. ## Envoyer dans le corps d'une requête Il est possible de coller un unique fichier via le corps d'une requête POST : ```bash $ cal | curl -XPOST --data-binary @- http://localhost:8000/ | URL | size | filename | |-------------------------|--------|----------| | https://p.afpy.org/mo8X | 184 | request | ``` Dans ce cas, il est possible de choisir la coloration syntaxique via l'entête `Content-Type` : ```bash $ cal | curl -XPOST -H "Content-Type: text/plain" --data-binary @- http://localhost:8000/ | URL | size | filename | |-------------------------|--------|-------------| | https://p.afpy.org/dNuo | 184 | request.txt | ``` ## Fonction bash Pour ceux qui ne souhaitent pas rédiger des requêtes `curl` toute la journée, voici une petite fonction bash : ```bash paf() { if [[ $# == 0 ]] then curl https://p.afpy.org/ --data-binary @- -H "Content-Type: text/plain" else curl https://p.afpy.org/ "${@/*/-F&=@&}" fi } ``` Cette fonction est capable d'envoyer un fichier : ```bash $ paf manage.py | URL | size | filename | |-------------------------|--------|-----------| | https://p.afpy.org/g3LE | 251 | manage.py | ``` plusieurs fichiers : ```bash $ paf *.py | URL | size | filename | |-------------------------|--------|-----------------------| | https://p.afpy.org/bvRV | 188 | admin.py | | https://p.afpy.org/5uei | 296 | context_processors.py | | https://p.afpy.org/Xg5a | 1419 | models.py | | https://p.afpy.org/GkGS | 309 | urls.py | | https://p.afpy.org/LVXL | 2730 | views.py | ``` et même de lire sur `stdin` : ``` $ cal | paf | URL | size | filename | |-------------------------|--------|-------------| | https://p.afpy.org/dNuo | 184 | request.txt | ``` Dernière démo, puisque le résultat d'un envoi est un tableau de toutes les URL, il est tentant de le partager lui aussi : ``` $ paf *.py | paf | URL | size | filename | |-------------------------|--------|-------------| | https://p.afpy.org/L5pc | 488 | request.txt | ``` Ce qui donne : ``` $ curl https://p.afpy.org/L5pc | URL | size | filename | |-------------------------|--------|-----------------------| | https://p.afpy.org/7rFj | 188 | admin.py | | https://p.afpy.org/DLfp | 296 | context_processors.py | | https://p.afpy.org/9o33 | 0 | __init__.py | | https://p.afpy.org/YdvG | 1419 | models.py | | https://p.afpy.org/97fG | 309 | urls.py | | https://p.afpy.org/oPRr | 2974 | views.py | ``` pratique pour partager tout un dossier. ## Accès aux collages Chaque collage peut-être consulté dans un navigateur (où il est présenté avec de la coloration syntaxique : https://p.afpy.org/g3LE), ou être consulté en ligne de commande (où il est délivré brut) : ``` $ curl https://p.afpy.org/g3LE #!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webtools.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) ```