# Récupérer plusieurs profils Cesium+ en une seule requête HTTP

**URL:** https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119
**Category:** CS+
**Created:** [11 April 2020 10:18 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119 "2020-04-11T10:18:11Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![anon88550267](https://forum.duniter.org/user_avatar/forum.duniter.org/anon88550267/32/11289_2.png) [@anon88550267](https://forum.duniter.org/u/anon88550267)
#### Post date: [11 April 2020 10:18 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/1 "2020-04-11T10:18:11Z")

</div>

Bonjour,

Pour générer un nuage des noms des donateurs, je veux récupérer leurs noms tels que renseignés dans Cesium+.

L’ennui c’est que j’ai 15 secondes de temps de chargement, et je pense que c’est dû au fait que je dois faire une requête HTTP par profil.

Typiquement, j’appelle ce genre d’url

[http://g1.data.duniter.fr/user/profile/JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn](http://g1.data.duniter.fr/user/profile/JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn)

Quand il y en a 87, ça commence à faire beaucoup de requêtes (87 du coup).

Est-ce qu’il y a un moyen de récupérer plusieurs profils Cesium+ en une seule requête ?

CC: @kimamila, @Paidge, @ManUtopiK

Merci d’avance 🙂

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [11 April 2020 20:08 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/2 "2020-04-11T20:08:35Z")

</div>

> [@anon88550267](#):
>
> Est-ce qu’il y a un moyen de récupérer plusieurs profils Cesium+ en une seule requête ?

Bien sûr 🙂

Tu peux même :

- Lire la [doc de Cesium+ REST api](https://github.com/duniter/cesium-plus-pod/blob/master/src/site/markdown/REST_API.md#userprofile) qui s’appliquera à `/user/profile/_search`;
- Lire [la doc d’ElasticSearch v2.4 - Search request API](https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-uri-request.html);
- tester ta requête dans l’explorateur de [document Cesium+](https://g1.duniter.fr/#/app/data/search/user/profile?q=issuer:7rfu4YAErdqN8LUTH8GKjiLqzXwuZaAHmtGyzRDTvjKL%20OR%20issuer:DX38ZgotV83VtRnmqGdzUNeNP13dAVyLu8oFtiJMY58u) et récupérer la requête exacte, dans la console réseau (des outils de développement).

Alors, heureux ? 🙂

Du coup, tu peux meme récupérer uniquement les infos intéressantes dans ton cas :  
`/user/profile/_search?q=<REQUETE>&_source=issuer,title` et hop !

---

<div class="post-metadata">

### Author: ![anon88550267](https://forum.duniter.org/user_avatar/forum.duniter.org/anon88550267/32/11289_2.png) [@anon88550267](https://forum.duniter.org/u/anon88550267)
#### Post date: [11 April 2020 21:46 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/3 "2020-04-11T21:46:43Z")

</div>

> [@kimamila](#):
>
> Du coup, tu peux meme récupérer uniquement les infos intéressantes dans ton cas :  
> `/user/profile/_search?q=<REQUETE>&_source=issuer,title` et hop !

Ok, merci 🙂

Je mets des “+” entre les clefs publiques et ça a effectivement l’air de me retourner ce dont j’ai besoin :

[http://g1.data.duniter.fr/user/profile/\_search?q=JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn+BCnd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd&\_source=issuer,title](http://g1.data.duniter.fr/user/profile/_search?q=JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn+BCnd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd&_source=issuer,title)

EDIT : ah, non, apparemment c’est comme avec des  
`/user/profile/_search?q=issuer:{clef1}%20OR%20issuer:{clef2}`

qu’il faut que je fasse, si je veux que ce soit propre.

Ce qui donne :

[http://g1.data.duniter.fr/user/profile/\_search?q=issuer:JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn%20OR%20issuer:BCnd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd&\_source=issuer,title](http://g1.data.duniter.fr/user/profile/_search?q=issuer:JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn%20OR%20issuer:BCnd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd&_source=issuer,title)

---

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [12 April 2020 07:25 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/4 "2020-04-12T07:25:25Z")

</div>

A un certain moment, tu ne pourras plus ajouter d’informations dans l’url. Et puis tout mettre dans l’url, c’est mal, bouh, pas beau. 🤮

Pour une requête plus complexe ou avec beaucoup d’informations de filtrage, tu devras préparer ta requête ElasticSearch et l’envoyer en POST dans le body.

Hope it helps…

---

<div class="post-metadata">

### Author: ![anon88550267](https://forum.duniter.org/user_avatar/forum.duniter.org/anon88550267/32/11289_2.png) [@anon88550267](https://forum.duniter.org/u/anon88550267)
#### Post date: [12 April 2020 08:05 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/5 "2020-04-12T08:05:01Z")

</div>

> [@vit](#):
>
> A un certain moment, tu ne pourras plus ajouter d’informations dans l’url.

À quel moment ?

---

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [12 April 2020 08:12 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/6 "2020-04-12T08:12:07Z")

</div>

Au moment où le navigateur va tronquer ton url, ou bien le serveur te renvoyer l’erreur 414 (Request-URI Too Long).

> <https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers>

Accessoirement, c’est aussi une question de vie privée/sécurité, puisque tes url sont log-guées, les informations que tu y mets sont exposées. Si tu les mets en body d’un POST, elle ne sont pas log-guées, et reste uniquement visible de ceux qui interceptent la requête.

---

<div class="post-metadata">

### Author: ![anon88550267](https://forum.duniter.org/user_avatar/forum.duniter.org/anon88550267/32/11289_2.png) [@anon88550267](https://forum.duniter.org/u/anon88550267)
#### Post date: [12 April 2020 17:02 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/7 "2020-04-12T17:02:37Z")

</div>

> [@vit](#):
>
> Au moment où le navigateur va tronquer ton url

Je mets l’URL dans un [file\_get\_contents](https://www.php.net/file_get_contents), risque-je de rencontrer le problème aussi dans ce cas ?

---

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [12 April 2020 17:42 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/8 "2020-04-12T17:42:57Z")

</div>

> [@anon88550267](#):
>
> issuer:JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn%20OR%20issuer:BCnd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd&\_source=issuer,title

Oui, l’url est exposée, donc c’est cramé.

Pour être propre et pouvoir ajouter plein de profils en une seule requête, il faut que tu utilises POST et que tu mettes ça dans le body :

```json
    {
      "query": {
        "bool": {
          "should": [
                      { "match": { "issuer": "JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn" }},
                      { "match": { "issuer": "nd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd" }}
          ]
        }
      },
      "_source": "issuer,title"
    }

```

Voir [Combining Queries | Elasticsearch: The Definitive Guide [2.x] | Elastic](https://www.elastic.co/guide/en/elasticsearch/guide/current/bool-query.html)

D’abord tu testes ta requête dans un client d’API REST, comme [le module Rested de Firefox](https://addons.mozilla.org/fr/firefox/addon/rested/) ( mode **custom** pour le body).

Quand c’est bon, tu crées le body en php (un tableau que tu convertis en string json). Puis tu balance en POST, voir le commentaire [PHP: file\_get\_contents - Manual](https://www.php.net/manual/fr/function.file-get-contents.php#102575)

---

<div class="post-metadata">

### Author: ![anon88550267](https://forum.duniter.org/user_avatar/forum.duniter.org/anon88550267/32/11289_2.png) [@anon88550267](https://forum.duniter.org/u/anon88550267)
#### Post date: [12 April 2020 20:16 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/9 "2020-04-12T20:16:57Z")

</div>

> [@vit](#):
>
> Oui, l’url est exposée, donc c’est cramé.

Exposée à qui ?

Ne sont-ce pas que des infos qui transitent uniquement entre le serveur PHP qui fait tourner le script et le serveur depuis lequel je récupère les données ?

Et, quand bien même elles seraient visibles de tout un chacun, en quoi est-ce que ça peut poser problème dans mon cas d’usage, qui est d’afficher un nuage des noms des donateurs ? D’ailleurs, pour plus de transparence, je pourrais même effectivement aller jusqu’à afficher les clefs publiques correspondantes au survol du nom Cesium+ 🙂

---

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [12 April 2020 22:34 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/10 "2020-04-12T22:34:58Z")

</div>

J’explique simplement quelles sont les bonnes pratiques quand on utilise le protocole HTTP. C’est en oubliant celles-ci qu’on finit par mettre des mots de passe dans les urls. D’ailleurs il y a même des puristes qui déconseillent de mettre l’id des clefs primaires des bases de données dans les urls (comme celle de discourse dans ta barre d’adresse), ils y voient une faille de sécurité.

Dans ton cas d’usage, la question ne se pose pas.

Par contre, si tu comptes ajouter plusieurs clés publiques dans ta recherche, la méthode que je te conseille te le permet sans limite, alors que la taille de l’url est limitée.

---

<div class="post-metadata">

### Author: ![anon88550267](https://forum.duniter.org/user_avatar/forum.duniter.org/anon88550267/32/11289_2.png) [@anon88550267](https://forum.duniter.org/u/anon88550267)
#### Post date: [16 April 2020 09:42 UTC](https://forum.duniter.org/t/recuperer-plusieurs-profils-cesium-en-une-seule-requete-http/7119/11 "2020-04-16T09:42:44Z")

</div>

> [@vit](#):
>
> C’est en oubliant celles-ci qu’on finit par mettre des mots de passe dans les urls

Oui, bon, après, dans la version actuelle il y a moult failles XSS, alors on n’est plus à une faille de sécurité près haha 🤣

La limite risque d’être plus embêtante en revanche ; merci pour l’info 🙂
