142 lines
4.1 KiB
Markdown
142 lines
4.1 KiB
Markdown
|
# 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)
|
||
|
```
|