DATAtourisme

Importation du flux impossible

Bonjour,

Par une commande PHP, j’essaye de récupérer un flux DATAtourisme sur mon serveur, mais je tombes en erreur 504 Gateway Timeout !

J’utilise la commande :
$content = @file_get_contents(trim($src));
avec $src = url du flux

J’ai essayé avec la commande :
$ch = curl_init(trim($src));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // Utilise TLS 1.2
$content = curl_exec($ch);
curl_close($ch);

et j’ai la même erreur.

par contre, les 2 fonctionnent bien sur un serveur local.

Je pense à un problème d’identification de mon URL par le serveur DATAtourisme, mais je ne vois pas laquelle, n’y comment m’en sortir.

Si quelqu’un peut m’aider ?

Merci.

Bonjour, j’ai le même problème, si vous avez trouvé la solution ça m’intéresse…

Bonjour
Je vous invite à consulter les échanges suivants:

Cela doit fonctionner.
:slight_smile:

Merci, mais je crois que le problème vient du serveur et pas du script. J’ai réussi à télécharger en PHP sur free.fr (avec file_get_contents) mais sur OVH ça ne fonctionne pas: erreur 504 Gateway Timeout.
Est-ce que Datatourisme bloquerait les serveurs OVH?

Bonjour Patrick,

Tu as raison.
Il y a soit quelque chose du coté de DataTourisme qui bloque les serveur OVH où vis versa.
Je viens de tester mon programme sur un serveur autre qu’OVH et ça fonctionne.

Il serait bien de trouver ce qui bloque avec les serveurs OVH !
Mais comment faire ?

1 « J'aime »

Bonsoir
Le script indiqué à l’adresse précédente fonctionne sur un serveur VPS hébergé chez OVH.
Essayez de vos en inspirer en passant par la commande Curl
Merci pour votre retour dès que vous aurez réussi

Je n’ai pas un VPS mais un hébergement mutualisé, ça vient peut-être de là?
Mais comment ça peut marcher chez Free qui est pourtant beaucoup plus limité?

Je pense davantage de restriction sur l’usage de file_get_contents chez OVH
Avez vous essayé file_get_contents sur une autre adresse externe ?

Bonjour François,

Je suis également sur du mutualisé OVH et j’utilise la commande file_get_contents pour récupérer des données de TourInFrance ou Intramuros et pas de soucie.
Je n’ai le souci avec cette commande qu’avec DATAtourisme.
Donc cela ressemble vraiment à un blocage des adresses IP des mutualisés d’OVH par DATAtourisme.
J’ai testé aussi la commande Curl, mais ça ne fonctionne pas mieux.

Non je ne pense que nous bloquions les adresses IP des serveurs mutualisés d’OVH. Nous bloquons des adresses ip qui font du data scrapping mais pas davantage.

Pourriez vous m’envoyer votre code source en message direct avec l’URL du webservice complète avec clé API
Je vais regarder ce qui ne va pas
merci

Pour le Curl, j’utilisai :

$ch = curl_init(trim($src));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // Utilise TLS 1.2
$content = curl_exec($ch);
curl_close($ch);

J’ai essayé avec :

 set_time_limit(0); // no script timeout

        // Importation
        $rowdatas_temp_file = __DIR__.'datas.temp';
        SyndicationbaseModel::$GlobalFileHandle = fopen($rowdatas_temp_file, 'w+');

  $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, trim($src));
        curl_setopt($ch, CURLOPT_FILE, SyndicationbaseModel::$GlobalFileHandle);
        curl_setopt($ch,CURLOPT_ENCODING , 'gzip');
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'SyndicationbaseModel::captureHeader');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, -1);
        curl_setopt($ch, CURLOPT_VERBOSE, false);
        curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'SyndicationbaseModel::curlWriteFile');
        $curlResponse = curl_exec($ch);
        // Gestion des erreurs
        if( $curlResponse === false) {
            $reponses[] = 'Erreur Curl : ' . curl_error($ch);
        } else {
            $reponses[] = 'Le téléchargement s\'est terminé sans aucune erreur';
		}
.....
....
...
   public static function curlWriteFile($cp, $data) {
        $len = fwrite(SyndicationbaseModel::$GlobalFileHandle, $data);
        return $len;
    }
    public static function captureHeader($ch, $headerData){
        if (substr($headerData, 0, 4) == 'HTTP'){
            SyndicationbaseModel::$curlStatus = substr($headerData, 9, 3);
        }
        else if (false !== strpos($headerData, ':')){
            list($header, $content) = explode(':', $headerData, 2);
            //Normalize the header name
            $header = SyndicationbaseModel::normalize($header);
            $content = trim($content);

            SyndicationbaseModel::$curlHeaders[$header] = $content;
        }
        return strlen($headerData);
    }
    public static function normalize($header){
        return ucfirst(strtolower(trim($header)));
    }

Mais pas mieux, toujours erreur 504 Gateway Timeout.

$src = "https://diffuseur.datatourisme.fr/webservice/4f94b20237c3db6947d19dbcd801150a/xxxxxxxxxxxx";

IP du serveur est :
213.186.33.xx
2001:41d0:1:1b00:213:186:xxx

Bonsoir,

Je viens de regarder dans l’ensemble des logs de la plateforme (accès, erreur, blocage pour flood) sur les 2 dernier mois et je ne trouve aucune trace de l’adresse IP citée.

Il y a bien eu des appel à votre flux entre le 7 et le 19 septembre mais aucun n’est en erreur. (ou bloqué)

Cela ressemble à un blocage en sortie de votre serveur.

Je me suis permis de masquer le dernier élément de votre IP et la clé de votre flux pour des raisons de sécurité.

Je connais mal les serveur mutu OVH, mais je sais qu’ils sont en train de faire de gros travaux sur leur infra.

Pourriez vous refaire les appels aux API TourInFrance ou Intramuros avec le même script ?

Cordialement

Bonsoir,

Oui, j’ai également fait des appels en local de sur mon PC.

Je viens de retester un appel au flux TourInFrance et Intramuros et ça passe sans problème.
J’ai également refait une tentative sur celui de DATAtourisme et toujours pas !

J’ai également ouvert un ticket chez OVH, et pour l’instant leur réponse est :
Je suis navré de la situation que vous rencontrez.

Je viens de vérifier le bon fonctionnement de vos services et je vous confirme qu’à notre niveau aucun incident n’est constaté sur nos infrastructures.

Vous êtes actuellement sur un hébergement mutualisé, de ce fait la configuration ne vous permet pas de réaliser le téléchargement souhaité.

Si vous souhaitez avoir plus de liberté pour votre environnement d’exécution, je vous invite à vous tourner vers nos offres VPS et serveurs dédiés.

Je vais essayer de récupérer un flux DATAtourisme JSON plutôt qu’un ZIP.

Bonjour
Si vous souhaitez, j’ai une classe php que je peux vous envoyer par email.
Vous pouvez me contacter en message direct

Bonjour Jean-François,

Merci pour cette proposition.
L’avez vous testé sur un hébergement mutualisé d’OVH ?

Non, il fonctionne sur un vps chez OVH

Oui, mais le problème c’est que je sui sur un mutualisé d’OVH

oui et pourquoi ne pas essayer sur le mutualisé ?

C’est ce que j’ai fait.
J’ai repris la partie de ton code sur la partie Curl et pas mieux.
Etant sous Joomla, je ne peux pas reprendre ton code tel quel.

Bonjour @Fabrice_PELLETIER
Pour des raisons de performance, nous envoyons les flux comprimés.
Mon script effectivement ne fonctionne pas sur un mutualisé, d’après ce que vous répond OVH, c’est impossible sur un mutualisé.
Apres recherche, une piste est peut etre à explorer :

Autre solution, souscrire une offre VPS