PHP, Récupérer fichier json depuis une URL (file_get_contents)
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

PHP, Récupérer fichier json depuis une URL (file_get_contents)



  1. #1
    Vicolo

    PHP, Récupérer fichier json depuis une URL (file_get_contents)


    ------

    Bonjour,

    je dispose d'une url (dans l'exemple "$url") qui redirige vers un site avec du json. (cf "Capture.png")
    Ma tâche consiste à retirer le fichier JSON et le traiter pour séparer chaque données et mettre le tout dans un tableau tout jolie.
    J'arrive à le faire en local lorsque j'enregistre une fichier JSON "fichier.json" dans le répertoire de mon index.php et que je fais un :
    Code PHP:
      $file_json file_get_contents("fichier.json");
      
    $parsed_json = (json_decode($result));

    //...
    //Puis le traitement qui fonctionne très bien
    //... 
    Mon problème se pose lorsque je veux récupérer le fichier json depuis l'URL (cf capture d'écran "Capture.png")
    Je me suis documenté (notamment sur stackoverflow.com)
    Notamment ce topic : http://stackoverflow.com/questions/5...ent-from-a-url
    (et d'autres topic qui ont la même solution)

    J'en suis venu à cette solution :
    Code PHP:
      $ch curl_init();
      
    curl_setopt($chCURLOPT_URL,$url);
      
    curl_setopt($chCURLOPT_SSL_VERIFYPEERtrue);
      
    curl_setopt($chCURLOPT_BINARYTRANSFERtrue);
      
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
      
    curl_setopt($chCURLOPT_USERPWD"$user:$password");
      
    $result=curl_exec($ch);
      
    curl_close($ch);

      
    $file_json file_get_contents($url);
      
    $parsed_json = (json_decode($result)); 
    (sachant que la solution :
    Code PHP:
    $parsed_json json_decode(file_get_contents($url)); 
    ne fonctionne pas non plus )


    Mais bien evidemment cela retourne des erreurs (cf "Capture erreurs PHP.png" en pièces jointes) (sinon je ne serais pas là)

    Comme indiqué sur stackoverflow j'ai regardez dans le php.ini où j'ai vérifié que les deux variables suivantes étaient sur "On".

    Code PHP:
    Whether to allow the treatment of URLs (like http:// or ftp://) as files.
    http://php.net/allow-url-fopen
    allow_url_fopen On

    Whether to allow include/require to open URLs (like http:// or ftp://) as files.
    http://php.net/allow-url-include
    allow_url_include On 
    Mais j'ai lu quelque part que le php.ini n'était pas recompilé à chaque ouverture de service ? Est-ce vrai ? Faut-il mettre une manip pour véritablement mettre à jour php.ini ? (était-ce le bon aussi...)
    J'ai arrêter/redémarrer les services de WAMP en tout cas, et pas de changement.
    Je n'ai que ça comme piste ..

    Merci pour votre aide.

    -----
    Images attachées Images attachées

  2. #2
    Bluedeep

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Bonjour

    Je ne connais rien à PHP mais es-tu sur du contenu de la variable $url ?

  3. #3
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Salut,

    Oui, originalement pour accéder il demande un mot de passe et un login
    voilà le code en entier "flouté"

    Code PHP:
      $user "xxxxxxxxx";
      
    $password "xxxxxxxxxxxxx";
      
    $url ="https://backend.sigfox.com/api/devices/20xxx/messages"
      
    $ch curl_init();
      
    curl_setopt($chCURLOPT_URL,$url);
      
    curl_setopt($chCURLOPT_SSL_VERIFYPEERtrue);
      
    curl_setopt($chCURLOPT_BINARYTRANSFERtrue);
      
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
      
    curl_setopt($chCURLOPT_USERPWD"$user:$password");
      
    $result=curl_exec($ch);
      
    curl_close($ch); 
    sachant que les x sont là pour "flouter" le code evidemment

  4. #4
    Bluedeep

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Dans ton code, je ne comprends pas trop à quoi sert ton file_get_contents, puisque tu parse le JSON depuis le $result. Mais bon, comme PHP pour moi c'est de l'hébreux .... (bon, c'est pas juste comme comparaison, l'hébreux ont peut à la rigueur trouver cela élégant )

    Si tu le supprimes (le file_get_contents) ça dit quoi ?

  5. A voir en vidéo sur Futura
  6. #5
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Ah oui, merci BlueDeep (à force de vouloir tester pleins de trucs, je vous ai partagé le mauvais code le mauvais code ).

    voilà normalement ce que ça devait être à la place sur ces deux lignes :

    Code PHP:
      $file_json file_get_contents($url);  //"fichier.json"
      
    $parsed_json json_decode($file_json); 
    (et là on a bien l'utilisation du file_get_contents
    Mais ça ne change pas mon problème ..

  7. #6
    cherbe

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Bonjour
    Tu es sûr d'avoir les droits suffisants pour récupérer un fichier distant ?
    Certains hébergeurs interdisent cela.
    Pour avoir de l'argent devant soi, il faut en mettre de côté ! (proverbe lorrain)

  8. #7
    Bluedeep

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Citation Envoyé par Vicolo Voir le message
    Ah oui, merci BlueDeep (à force de vouloir tester pleins de trucs, je vous ai partagé le mauvais code le mauvais code )..
    Mais encore une fois je ne comprends pas l'utilité du file_get_content.

    Ton message "sigfox" en retour doit être dans $result, non ? (si j'en crois les exemples d'appel sigfox qu'on trouve sur le net).

    Si tu fait un parse JSON de $result, tu obtiens quoi ? Et sinon, que contient $result ?

  9. #8
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Merci à vous deux d'avoir répondu.

    Citation Envoyé par cherbe
    Bonjour
    Tu es sûr d'avoir les droits suffisants pour récupérer un fichier distant ?
    Certains hébergeurs interdisent cela.
    Je viens de tomber sur un lien internet justement qui en parlait, une histoire de DNS ? Notamment que je fais cela au boulot, qui utilise un VPN etc..
    J'ai essayé de ping google.com, et impossible de réussir à ping via la cmd.exe...
    Citation Envoyé par cmd.exe
    > ping google.com -t
    Ping request could not find host google.com. Please check the name and try again.
    Je me suis mis en partage de connexion (mais ma co ne doit pas être assez bonne, j'arrive même pas à load une page web google.com sur chrome) et le résultat du ping google.com -t donne "General failure"

    Citation Envoyé par Bluedeep
    Mais encore une fois je ne comprends pas l'utilité du file_get_content.

    Ton message "sigfox" en retour doit être dans $result, non ? (si j'en crois les exemples d'appel sigfox qu'on trouve sur le net).

    Si tu fait un parse JSON de $result, tu obtiens quoi ? Et sinon, que contient $result ?
    Oui tu as raison, j'avais voulu mixer la solution avec curl et sans curl.
    AVec les exemples sur le web on a bien :

    Code PHP:
      $file_json file_get_contents($result);  //"fichier.json"
      
    $parsed_json json_decode($file_json); 
    Sauf que toujours les mêmes erreurs qu'au début. j'ai l'impression tout bêtement que je n'arrive simplement pas à accéder au site web en fait.

    Lorsque que j'affiche les données $result et $parsed_json cela ne donne rien. Comme si elles étaient vides.

  10. #9
    Bluedeep

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Citation Envoyé par Vicolo Voir le message
    Lorsque que j'affiche les données $result et $parsed_json cela ne donne rien. Comme si elles étaient vides.
    Bon; partant de là, ça ne sert à rien de discuter du file_get_content, puisque le problème vient du fait que curl_exec ne te retourne rien.

    Il faut donc commencer par là.

    Comment se passe la gestion d'erreur sur PHP ? Comment récupère-t-on le status Http après un curl_exec ?

  11. #10
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Citation Envoyé par Bluedeep
    Comment se passe la gestion d'erreur sur PHP ? Comment récupère-t-on le status Http après un curl_exec ?
    alors là, j'en sais absolument rien.. Je suis tout nouveau sur PHP, et je bidouille pas mal avec l'aide sur internet.

    Comme erreur, à la ligne :

    Code PHP:
      $ch curl_init();
      
    curl_setopt($chCURLOPT_URL,$url);
      
    curl_setopt($chCURLOPT_SSL_VERIFYPEERtrue);
      
    curl_setopt($chCURLOPT_BINARYTRANSFERtrue);
      
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
      
    curl_setopt($chCURLOPT_USERPWD"$user:$password");
      
    $result=curl_exec($ch);
      
    curl_close($ch);

      
    $file_json file_get_contents($result);  //erreur à cette ligne là;
      
    $parsed_json json_decode($file_json); 
    j'ai :

    Warning: file_get_contents(): Filename cannot be empty in C:\WAMP\wamp64\www\tests\testa pi.php on line 20
    Donc à partir de là, on en déduit que le curl_exe($ch); retourne un 'vide' donc que tout le reste du programme utilisant $file_json ne fonctionne pas

    Mais la colle qui se pose, c'est comment vérifier/réparer cette connexion au site !

  12. #11
    Bluedeep

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Citation Envoyé par Vicolo Voir le message
    alors là, j'en sais absolument rien.. Je suis tout nouveau sur PHP, et je bidouille pas mal avec l'aide sur internet.
    T'as pas du chercher des masses.
    Première entrée google : http://stackoverflow.com/questions/1...ting-http-code

    Donc, après le curl_exec, mettre :

    Code:
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    
    Donc, maintenant : quel status HTTP retourne le curl_exec ?

    (pas la peine d'essayer d'aller plus loin tant qu'on a pas cette réponse).

  13. #12
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    J'avais pas bien compris la question au fait. C'est vrai qu'en la comprenant, en une recherche google on retombe sur ton lien.

    Du coup, juste après le curl_exec($ch);:

    Code PHP:
      $httpcode curl_getinfo($chCURLINFO_HTTP_CODE); 
    retourne :
    0
    J'ai essayé aussi de faire un echo :
    Code PHP:
      echo $httpcode'  => La requête a mis ' $httpcode['total_time'] . ' secondes à être envoyée à ' $httpcode['url']; 
    Et evidemment, on obtient juste :
    0 => La requête a mis secondes à être envoyée à
    En ajoutant à cela, que j'ai juste essayer de faire un CURLINFO_FILETIME, et le curl_getinfo retourne bien -1 (ce qui signifie que la date du document distant est inconnue.)

  14. #13
    Bluedeep

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Citation Envoyé par Vicolo Voir le message
    En ajoutant à cela, que j'ai juste essayer de faire un CURLINFO_FILETIME, et le curl_getinfo retourne bien -1 (ce qui signifie que la date du document distant est inconnue.)
    Bon, là il y a un problème car si ton URL est inaccessible, tu récupère un status Http (le statut "OK" c'est 200 - il n'existe pas de statut "0").
    https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

    Test simple : sur la même machine où tu exécute ton programme Http, que se passe-t-il si tu passes l'URL d'appel sigfox dans un browser ? Normalement, il doit te demander user /mots de passe. Si il ne le fait pas, ton problème est peut être à chercher coté réseau.

  15. #14
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Test simple : sur la même machine où tu exécute ton programme Http, que se passe-t-il si tu passes l'URL d'appel sigfox dans un browser ? Normalement, il doit te demander user /mots de passe. Si il ne le fait pas, ton problème est peut être à chercher coté réseau.
    J'ai bien accès au site web $url (= https://backend.sigfox.com/api/devices/20xxx/messages):
    Où dès la connexion sur le browser une pop-up s'ouvre pour rentrer le user & password.

    C'est là où est le problème, ça n'a pas l'air de fonctionner dans le code, alors que manuellement en tapant l'url dans le browser ça fonctionne très bien et j'ai accès au fichier json (cf les premieres captures du 1er post)

  16. #15
    Bluedeep

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Citation Envoyé par Vicolo Voir le message
    J'ai bien accès au site web $url (= https://backend.sigfox.com/api/devices/20xxx/messages):
    Où dès la connexion sur le browser une pop-up s'ouvre pour rentrer le user & password.

    C'est là où est le problème, ça n'a pas l'air de fonctionner dans le code, alors que manuellement en tapant l'url dans le browser ça fonctionne très bien et j'ai accès au fichier json (cf les premieres captures du 1er post)
    Donc on est sur un problème strictement PHP; désolé, mais là je ne suis d'aucune aide ne connaissant pas du tout ce langage.
    Je passe la main.

  17. #16
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Je double post comme je ne peux plus modifier :

    If you connect with the server, then you can get a return code from it, otherwise it will fail and you get a 0. So if you try to connect to "www.google.com/lksdfk" you will get a return code of 400, if you go directly to google.com, you will get 302 (and then 200 if you forward to the next page... well I do because it forwards to google.com.br, so you might not get that), and if you go to "googlecom" you will get a 0 (host no found), so with the last one, there is nobody to send a code back.
    Sinon, j'ai fait un :

    Code PHP:
    print curl_error($ch); 
    et j'obtiens :

    Could not resolve host: backend.sigfox.com
    le problème vient donc bien de la connexion avec le site.

    A ce stade, je me (re)demande si ce n'est pas du à la sécurité informatique de mon entreprise qui doit bloquer l'accès avec les DNS/VPN ou je ne sais quuoi d'autre ?

  18. #17
    cherbe

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Et avec des paramètres passés dans l' URL mais je ne sais pas si c'est possible en https et si le site le permet ?
    https://backend.sigfox.com/api/devic...XX&passwd=YYYY
    Pour avoir de l'argent devant soi, il faut en mettre de côté ! (proverbe lorrain)

  19. #18
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Je te remercie pour ton aide, mais ça n'a pas l'air de marcher...
    Je reste bloquer sur la pop-up qui demande userassword !

  20. #19
    Bluedeep

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    Citation Envoyé par cherbe Voir le message
    Et avec des paramètres passés dans l' URL mais je ne sais pas si c'est possible en https et si le site le permet ?
    https://backend.sigfox.com/api/devic...XX&passwd=YYYY
    Non, apparemment l'authentification se fait via des champs du header (ce qui est logique : si l'authentification se fait via des paramètres, c'est une authentifcation applicative coté serveur, par le header on peut gérer l'authentification sans lien avec l'application elle même).

  21. #20
    Vicolo

    Re : PHP, Récupérer fichier json depuis une URL (file_get_contents)

    J'ai effectué un test aujourd'hui,

    J'ai changé l'URL en un URL de l'intranet de ma boite.
    Et là, le CURLINFO_HTTP_CODE retourne bien "401" donc il arrive à atteindre le site.
    (alors qu'il envoyait "0" lorsque j'essayai de me connecter à mon ancien URL)

    Le problème vient donc des permissions. Je vais voir ça avec les personnes de la sécu informatique et je reviendrai vers vous.

Discussions similaires

  1. Exécuter un fichier shell depuis un fichier Php
    Par Micka57130 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 13/05/2015, 13h05
  2. comment créer des classes Java à partir du fichier JSON en utilisant Velocity ?
    Par job.moun dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 07/05/2015, 15h11
  3. ouvrir un fichier excel depuis un autre fichier avec VBA
    Par invite31937040 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 24/04/2012, 12h44
  4. Recupérer de l'air chaud depuis la réhausse d'un poele
    Par invite9092e7be dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 4
    Dernier message: 07/10/2011, 11h33
  5. récuperer fichier tmp
    Par invite4d2ad684 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 02/08/2009, 19h43