Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impossibilité de récupérer le contenu de l'API sur un serveur distant #43

Open
thib66 opened this issue Nov 21, 2024 · 6 comments
Open

Comments

@thib66
Copy link

thib66 commented Nov 21, 2024

Bonjour,
J'arrive bien à lancer l'URL suivante dans un navigateur internet sur mon PC :
https://api.vigieau.beta.gouv.fr/api/zones?commune=66120

Par contre en lançant cette URL dans un script PHP via la commande curl sur un serveur distant,
je n'obtiens pas de réponse et ai un timeout.
Le script se trouve sur un serveur de l'hébergeur OVH.
Y a t-il une probabilité que le serveur soit blacklisté ?
Pour contourner le problème, proposez-vous un accès à l'API via authentification / token ?
En vous remerciant par avance pour votre retour,

@vincentlaine
Copy link
Collaborator

vincentlaine commented Nov 25, 2024

Bonjour,

L'API est totalement ouverte il n'y a donc pas de système de auth / token.
La seule restriction qu'il y ai côté API est la présence de helmet (https://docs.nestjs.com/security/helmet) mais cela ne devrait pas renvoyer un timeout. J'ai déjà de mon côté fait des scripts qui s'exécutaient sur des serveurs distants et je n'ai jamais eu de problèmes.

Est-ce que en lançant le script en local cela fonctionne ? Si oui, il faudrait vérifier sur le serveur OVH si en faisant un curl sur une autre URL cela timeout également. Si cela timeout sur d'autres URLs ce doit sûrement être des réglages côté ouverture de port sur le serveur OVH.

@thib66
Copy link
Author

thib66 commented Nov 25, 2024

Bonjour,
Merci pour votre retour. Sur le serveur OVH au niveau de la fonction curl j'ai paramétré un timeout de 10000 ms.
Voici le message que je reçois : URL Error (): Failed to connect to api.vigieau.beta.gouv.fr port 443: Connection timed out.
L'appel du curl se fait de manière asynchrone dans le sens où l'appel de l'API se fait par cron de nuit et le résultat de l'appel est stocké dans un fichier texte. Une page de mon site appelle ensuite le contenu du fichier texte stocké. En cas d'attaque du serveur OVH, par de multiples requêtes, l'appel de l'API est protégé.
Ce n'est pas un problème d'ouverture de port car je fais appel à d'autres API REST via curl et PHP sans problème en mode HTTP ou HTTPS. Le serveur web Linux hébergé chez OVH ne me permet pas d'avoir un terminal pour lancer un curl.
Cependant j'ai un autre serveur Windows hébergé également chez OVH et pas de souci pour lancer un curl sur l'URL.
Je reste à votre disposition pour de plus amples renseignements.

@thib66
Copy link
Author

thib66 commented Nov 25, 2024

Je viens de tester en remplaçant curl par file_get_contents($url) j'ai le même problème sur le serveur distant en HTTP et HTTPS (donc ce n'est pas un souci de certificat)

@vincentlaine
Copy link
Collaborator

Désolé je n'ai pas eu le temps de m'en occuper.

Avez-vous pu trouver une solution ?

@thib66
Copy link
Author

thib66 commented Dec 10, 2024

Bonsoir,
non je n'ai pas trouvé de solution.
J'ai contacté le support technique d'OVH qui me dit que tout est OK de leur coté et m'invitent gentiment à contacter un webmaster pour régler le problème. On croit rêver ...
Pour le moment je récupère le json résultant de la requête de temps en temps pour le pousser par FTP. Le contenu du json est ensuite analysé à chaque appel de la page PHP

@thib66
Copy link
Author

thib66 commented Jan 8, 2025

Afin de régler mon problème, j'utilise désormais un serveur web installé sur un Raspberry qui joue le rôle de passerelle.
Sur ce Raspberry, j'ai créé une page PHP qui lance l'URL de l'API et stocke le résultat sous forme de fichier JSON.
Côté OVH, j'ai une tâche cron qui lance un script PHP qui lui même appelle la page PHP sur le serveur Raspberry afin de réactualiser le fichier JSON puis ensuite récupère le contenu de ce fichier JSON.
C'est bancal mais cela à le mérite de fonctionner ....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants