Skip to content

Commit c21dc67

Browse files
committed
better local httpbin
1 parent 2124c90 commit c21dc67

File tree

2 files changed

+35
-15
lines changed

2 files changed

+35
-15
lines changed

requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
beautifulsoup4
22
fastapi
3+
gunicorn
4+
httpbin
35
httpx[http2]
46
ipycytoscape
57
ipympl

slides/03-httpx/httpx.md

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,39 @@ Cours 3 : utiliser `httpx`
2525

2626
<!-- #endregion -->
2727

28-
**Note** La bibliothèque [request](https://requests.readthedocs.io), un peu moins moderne est aussi très utilisée, ça peut valoir le coup d'y jeter un œil.
28+
**Note** La bibliothèque [requests](https://requests.readthedocs.io), un peu moins moderne est aussi
29+
très utilisée, ça peut valoir le coup d'y jeter un œil.
2930

30-
<!-- #region -->
31-
**Note** Si vos requêtes sur httpbin font des timeouts, vous pouvez essayer avec
32-
`https://httpbingo.org` à la place. En désespoir de cause, lancez netcat avec `nc -kdl 8000` et
33-
faites vos requêtes `http://localhost:8000`, vos requêtes feront des timeout (netcat ne répond pas),
34-
mais au moins vous les verrez dans le terminal. Une autre solution est de lancer httpbin en local avec Docker :
31+
<!-- #region slideshow={"slide_type": "slide"} -->
32+
**Note** Si vos requêtes sur httpbin (qui n'est plus maintenu au 2024-11-26) font des timeouts, vous
33+
pouvez essayer avec `https://httpbingo.org` à la place. Sinon vous pouvez utiliser httpbin en local
34+
(attention, ça ne marchera donc pas sur Binder). Installez-le (dans un venv bien sûr) si besoin (il
35+
est maintenant dans le `requirements.txt` du cours).
36+
37+
```bash
38+
python -m pip install gunicorn httpbin
39+
```
40+
41+
ou avec [uv](https://docs.astral.sh/uv/)
42+
43+
```bash
44+
uv pip install gunicorn httpbin
45+
```
46+
47+
Il se lance ensuite avec
3548

3649
```bash
37-
docker pull kennethreitz/httpbin
38-
docker run -p 80:80 kennethreitz/httpbin
50+
gunicorn httpbin:app
3951
```
52+
53+
Si vous le laisser tourner dans un terminal, vous pouvez ensuite envoyer vos requêtes à
54+
`http://localhost:8000`. Arrêtez-le avec <kbd>ctrl</kbd>+<kbd>C</kbd>. Voir
55+
<https://github.com/psf/httpbin> pour plus d'info (par exemple comment faire ça avec Docker).
56+
57+
En désespoir de cause, lancez netcat avec `nc -kdl 8000` et faites vos requêtes
58+
`http://localhost:8000`, vos requêtes feront des timeout (netcat ne répond pas), mais au moins vous
59+
les verrez dans le terminal.
60+
4061
<!-- #endregion -->
4162

4263
## HTTP en Python
@@ -73,15 +94,16 @@ httpx doit être installé. Si vous avez installé le `requirements.txt` du cour
7394
%pip install -U httpx[http2]
7495
```
7596

76-
L'extra `[http2]` sert à installer les fonctions liées à HTTP/2, qu'on ne verra en principe pas dans ce cours mais qui peuvent être utilse. Si vous voulez aussi l'interface en ligne de commande (un genre de cURL), vous pouvez installer avec `[cli]`, ou `[http2, cli]` pour avoir les deux.
97+
L'extra `[http2]` sert à installer les fonctions liées à HTTP/2, qu'on ne verra en principe pas dans
98+
ce cours mais qui peuvent être utilse. Si vous voulez aussi l'interface en ligne de commande (un
99+
genre de cURL), vous pouvez installer avec `[cli]`, ou `[http2, cli]` pour avoir les deux.
77100

78101
```python
79102
import httpx
80103
```
81104

82105
## Une première requête
83106

84-
85107
Exécutez la cellule de code suivante
86108

87109
```python
@@ -150,7 +172,6 @@ print(response.text)
150172

151173
Dans le cas de la page d'accueil du site du master, il est assez conséquent, puisqu'il s'agit de tout le code HTML de la page.
152174

153-
154175
`httpx` fait de son mieux pour déterminer automatiquement l'encodage du texte, mais s'il se trompe, le contenu sous forme binaire non décodée est toujours disponible dans l'attribut `content`.
155176

156177
```python
@@ -209,13 +230,10 @@ print(response.text)
209230

210231
Ah.
211232

212-
213233
Quel est le problème ici ?
214234

215-
216235
En fait, `httpx` ne sait passer que des paramètres binaires, et il encode implicitement les chaînes de caractères en `latin-1`, [comme c'est la norme](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.4.1).
217236

218-
219237
Pour utiliser un autre encodage, il faut le faire à la main.
220238

221239
```python
@@ -291,7 +309,7 @@ chose) :
291309
application/json`
292310
10. Une requête GET à <https://www.google.com> avec le *header* `Accept-Encoding: gzip`.
293311
11. Faites une requête à <https://httpbin.org/image> avec le *header* `Accept: image/png`.
294-
Sauvegarder le résultat dans un fichier PNG et ouvrez-le dans une visualiseuse d'images.
312+
Sauvegarder le résultat dans un fichier PNG et ouvrez-le dans une visualiseuse d'images.
295313
12. Faites une requête PUT à <https://httpbin.org/anything>
296314
13. Récupérez <https://httpbin.org/image/jpeg>, sauvegardez le résultat dans un fichier et ouvrez le
297315
dans un éditeur d'images

0 commit comments

Comments
 (0)