Nouveau : le pare-feu IA surveille toute la plateforme et explique chaque incident en termes simples. Découvrez comment ça marche

L'appel Python à l'endpoint des dernières valeurs bloque pendant deux minutes sur notre Pi

L'appel Python à l'endpoint des dernières valeurs bloque pendant deux minutes sur notre Pi

Résolu 4 4

Traduit de English par IA ·

Je fais tourner un petit écran d’accueil dans notre hôtel, un Pi 4 qui affiche les températures du frigo de la cuisine. Un script Python demande à Hermetry les dernières valeurs toutes les 5 minutes avec une clé API (preset « Read only ») :

GET /tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<deviceId>&keys=temperature
Authorization: Bearer sk_live_...

La plupart des appels prennent environ 2 minutes, certains expirent, puis parfois un appel répond instantanément. Depuis mon ordinateur portable sur le même Wi-Fi, c’est toujours instantané. J’ai testé curl sur le Pi pour comparer :

curl -4 ... -> 0.3 s
curl -6 ... -> hangs, then "Failed to connect"

Notre FAI attribue de l’IPv6 depuis le changement de routeur le mois dernier. Je ne connais pas grand-chose à l’IPv6 : puis-je simplement faire utiliser l’ancienne méthode au Pi ?

QoS 1 and a lot of patience.
♥ 1

Traduit de English par IA ·

Ne serait-ce pas la liste blanche d’adresses IP de la clé API qui bloque parfois votre accès ?

♥ 2

Traduit de English par IA ·

Cela vous donnerait immédiatement une erreur 401 ou 403, et non un blocage. Le plus simple est de désactiver IPv6 sur le Pi avec sysctl.

Ground loops are my cardio.
♥ 0

Traduit de English par IA ·

Exactement le même problème sur un de nos sites après que le FAI a activé l’IPv6. Le Pi obtient une adresse IPv6, il l’essaie en premier, la route est cassée et il attend le délai d’expiration avant de revenir à IPv4. Votre test curl le montre.Je ne voulais pas désactiver l’IPv6 partout, j’ai donc configuré le Pi pour préférer IPv4. Décommentez cette ligne dans /etc/gai.conf :

precedence ::ffff:0:0/96  100

Pas besoin de redémarrer pour les nouveaux processus, redémarrez simplement votre script. Si vous ne le voulez que pour le script, vous pouvez le forcer en Python avant d’importer requests :

import socket
import urllib3.util.connection as conn
conn.allowed_gai_family = lambda: socket.AF_INET

Et l’idée d’Owen reste bonne pour plus tard. Ajoutez l’IPv4 publique de l’hôtel à la liste d’autorisation IP de la clé, afin qu’une clé volée soit inutile ailleurs.

Solution acceptée♥ 6

Traduit de English par IA ·

La ligne dans gai.conf a résolu le problème, chaque appel prend maintenant moins d’une seconde. J’ai aussi ajouté notre IPv4 publique à la liste d’autorisation de la clé, comme tu l’as suggéré. Merci David !

QoS 1 and a lot of patience.
♥ 0
5 sujets de 1 à 5 (sur un total de 5)
  • Vous devez être connecté pour répondre à ce sujet.

Rejoignez la discussion

Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

Partager