IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

CURL et redirection


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut CURL et redirection
    Bonjour à tous,
    J'ai un besoin de réaliser des requêtes sur MusicBrainz. Je le réalise en cURL. Ca se passe bien pour les informations directement sur ce site, mais pour récupérer les informations de pochettes il y a des redirections et ça plante.
    Voilà le code en résumé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    // URLS des sites à contacter
    $mbApiUrl = 'https://musicbrainz.org/ws/2/';
    $coverArchiveApiUrl = 'https://coverartarchive.org/release/';
    // Fonction qui fait la requête et renvoie le résultat
    function curl_get_contents($url, $avecInfos = false) {
    	$ch = curl_init();
    	curl_setopt($ch, CURLOPT_URL, $url);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0');
    	$data = curl_exec($ch);
    	$info = curl_getinfo($ch);
    	curl_close($ch);
    	if ($avecInfos) return ['result' => $data, 'info' => $info];
    	else return $data;
    }
    // Fonction qui demande le JSON d'information sur un album
    function getMbJson($entity, $id = '', $inc = '', $query = '') {
    	$mbResult = curl_get_contents($this->mbApiUrl.$entity.(empty($id) ? '' : "/$id")."?fmt=json".(empty($inc) ? '' : "&inc=$inc").(empty($query) ? '' : '&query='.urlencode($query)));
    	if ($mbResult == false || empty($mbResult)) {
    		Messages::erreur('La requête à la base de données MusicBrainz n\'a pas aboutie', 'MusicBrainz');
    		return null;
    	} else return json_decode($mbResult);
    }
    // Fonction qui demande les informations sur la pochette
    function getCover($releaseId) {
    	$result = curl_get_contents($this->coverArchiveApiUrl.$releaseId, true);
    	if ($result['result'] == false || empty($result['result'])) {
    		Messages::erreur('La requête à la base de données Cover Art Archive n\'a pas aboutie', 'MusicBrainz');
    		return null;
    	} else return json_decode($result['result']);
    }
     
    // ID de l'album à chercher
    $releaseId = '99769b03-eb81-4f6b-ab4e-b5d2fdb0d590';
    // Récupérer le JSON de l'album
    $album = getMbJson('release', $releaseId, 'recordings+release-groups+labels'); // Ca marche bien, j'ai mes infos en JSON
    // Récupérer le JSON de la pochette
    $cover = getCover($releaseId); // Ca ne marche pas ! curl_exec() renvoi false.
    Ce qu'il se passe c'est que les infos d'album sont récupérées directement sur la page appelée. Mais les informations de pochette sont redirigées sur 3 pages :

    Pourtant cRUL est paramétré pour suivre les redirections, elles sont bien toutes en https.
    Mettre AUTOREFERER à True ou donner un CURLOPT_REFERER ne changent rien.

    Si j'interroge directement le dernier site ça fait des erreurs 404 au lieu de donner les informations dans les entêtes de réponse comme indiqué ici https://musicbrainz.org/doc/Cover_Art_Archive/API ce qui est moins pratique.
    En tout cas, ça me renvoi FALSE et je ne sais pas pourquoi.

    Merci pour votre aide !

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut
    J'ajoute que le serveur que j'utilise est en PHP 5.4.39 et utilise cURL 7.36.0

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut
    Bien, personne ne m'aide sur le sujet mais j'ai passé des heures à tourner autour pour tomber sur une probable cause.
    Je n'arrivais pas à avoir un message d'erreur de cURL, seulement un retour "false".
    En utilisant un simple fopen, j'ai eu l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: fopen(): Peer certificate CN=`*.musicbrainz.org' did not match expected CN=`coverartarchive.org' in ...
    ce qui était enfin une piste. J'ai donc repris cURL en testant l'option CURLOPT_SSL_VERIFYPEER à false sans spécifier d'autre certificat car je n'en ai pas. Ca n'a pas marché non plus.

    Pour finir, je fais tourner sans SSL car ces sites distants autorisent le HTTP en plus de HTTPS. Mais ce n'est pas une résolution du problème, c'est un contournement.
    Tant pis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CURL et redirect 302 qui boucle
    Par saluts92 dans le forum Langage
    Réponses: 3
    Dernier message: 11/11/2018, 02h36
  2. [cURL] Récupérer url redirection 302 sans la suivre
    Par Mogwaï dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 08/03/2012, 22h24
  3. [cURL] Variable POST et redirection
    Par Stouille89 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 16/08/2007, 20h58
  4. [cURL] redirection
    Par sharivaree dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/06/2007, 20h23
  5. [cURL] Redirection avec Curl: Une curiosité ?
    Par cybertj dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/11/2006, 22h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo