Impossible de récupérer json sur une url externe (doctolib)

Hello,
Sur cet url j’obtiens un json qui m’a l’air propre (en tous cas j’arrive à le lire avec un lecteur json), mais quand j’essaie de paramétrer un script de type json pour interroger cet url j’ai un message d’erreur « Json invalide ou non décodable ».

J’ai essayé de contourner en passant en type HTTP et la valeur alors retournée est effectivement très bizarre (je n’arrive pas à copier le contenu de l’info-bulle, désolé). On dirait que le site renvoie autre chose que le json, peut-être par sécurité ?

J’ai aussi essayé de passer par un scénario en bloc code :

 $url= 'https://www.doctolib.fr/availabilities.json?visit_motive_ids=2543924&agenda_ids=409255&practice_ids=164014&telehealth=false&limit=15&start_date=2025-05-27';
 $string = file_get_contents($url);
 
 $scenario->setLog($string);

Mais le log affiche un $string vide :

[2025-05-28 09:40:07][SCENARIO] -- Début : Scenario lance manuellement.
[2025-05-28 09:40:07][SCENARIO] - Exécution du sous-élément de type [action] : code
[2025-05-28 09:40:07][SCENARIO] Exécution d'un bloc code
[2025-05-28 09:40:08][SCENARIO]
[2025-05-28 09:40:08][SCENARIO] Fin correcte du scénario

Et enfin j’ai essayé un script en python (généré par chatgpt) via une commande info du plugin script et la valeur remontée est alors " Erreur lors de la requête : 403 Prochain créneau : NONE"
Le script en question :

#!/usr/bin/python3

import requests
import json

def get_next_slot(url):
    # Effectuer la requête HTTP pour récupérer le JSON
    response = requests.get(url)
    
    # Vérifier si la requête est réussie
    if response.status_code == 200:
        # Charger la réponse JSON
        data = response.json()
        
        # Extraire l'item "next_slot"
        next_slot = data.get('next_slot')
        return next_slot
    else:
        print(f"Erreur lors de la requête : {response.status_code}")
        return None

# URL à interroger
url = "https://www.doctolib.fr/availabilities.json?visit_motive_ids=2543924&agenda_ids=409255&practice_ids=164014&telehealth=false&limit=15&start_date=2025-05-27"

# Appeler la fonction et afficher le résultat
next_slot = get_next_slot(url)
print("Prochain créneau :", next_slot)

J’ai épuise toutes mes cartouches (pas très puissantes je l’avoue :smiley: ) , auriez-vous une idée ?

Bon bah je me réponds, j’ai résolu le problème avec l’aide de ChatGPT : en ajoutant un header qui simule un navigateur internet dans le script python cela fonctionne.

    # En-têtes HTTP pour simuler une requête provenant d'un navigateur
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    
    # Effectuer la requête HTTP pour récupérer le JSON
    response = requests.get(url, headers=headers)
1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.