Connection refused
Python
Erreur courante
Explication
L'erreur `ConnectionError: ... Connection refused` (souvent via `requests` ou `socket`) survient quand votre programme tente de se connecter à un serveur/port qui **n'accepte pas la connexion** : le service n'est pas démarré, l'adresse ou le port sont faux, ou un pare-feu bloque.
```python
import requests
requests.get("http://localhost:5000/api") # rien n'écoute sur le port 5000
# ConnectionError: HTTPConnectionPool(host='localhost', port=5000): ... Connection refused
```
Causes courantes
- **Le serveur n'est pas démarré** (ou a planté). - **Mauvais hôte ou mauvais port**. - **Pare-feu** ou groupe de sécurité qui bloque le port. - **Service pas encore prêt** (course au démarrage en tests ou avec Docker). - **Mauvais protocole** (`http` au lieu de `https`).
1. Vérifiez que le serveur écoute bien sur ce port
# Linux/macOS
ss -tlnp | grep 5000 # le port est-il en écoute ?
curl http://localhost:5000/api # tester hors Python
2. Contrôlez hôte, port et protocole
Assurez-vous que l'URL correspond exactement au service (https, bon port, bon chemin).
3. Réessayez avec une temporisation (services qui démarrent)
import time, requests
for tentative in range(5):
try:
r = requests.get(url, timeout=5)
break
except requests.ConnectionError:
time.sleep(2) # laisser le service démarrer
4. En production : gérez l'indisponibilité
Encadrez l'appel et prévoyez un repli ou un message clair plutôt qu'un plantage :
try:
r = requests.get(url, timeout=5)
except requests.ConnectionError:
logging.error("Service injoignable : %s", url)
Comment prevenir cette erreur
- **Vérifiez l'état du service** (health check) avant de l'appeler.
- **Mettez en place des reprises** (retry avec backoff) pour les services qui démarrent lentement.
- **Centralisez la configuration** (hôte/port) pour éviter les fautes de frappe.
- Référence : [requests — Exceptions](https://requests.readthedocs.io/en/latest/api/#exceptions).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
« Connection refused » ou « Connection timed out », quelle différence ?
« refused » = la machine est joignable mais **rien n'écoute** sur le port (service arrêté). « timed out » = la machine **ne répond pas** du tout (mauvaise adresse, pare-feu qui jette les paquets, réseau coupé).
Mes tests d'intégration échouent au démarrage, comment faire ?
Le service n'est pas encore prêt quand le test se lance. Ajoutez une boucle de reprise (retry) qui attend que le port réponde avant de lancer les requêtes.