Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par @rthur » 17 mai 2019, 17:57

Cette API doit forcément avoir une documentation, demande là si tu ne l'a pas déjà car ça ira plus vite que de bidouiller jusqu'à trouver un bout de code où ça "tombe" en marche ;-)

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par Samsss » 17 mai 2019, 17:56

Salut Saian,

Comme tu l'avais pressenti, l'erreur venait bien des headers, du coup après quelques recherches j'ai pu modifier mon code et accéder aux infos que je voulais. ps : je viens de remarquer que l'id que j'avais mis était faux aussi !!!
code :
<?php
  
$AUTH1 = 'XxxxX:pwd';  
	$ACCEPT = 'application/vnd.telefleet-v1+json';

	 //Header
	 $Header_array1 = array(
		"Authorization: Basic ".base64_encode($AUTH1),
		"Content-Type: ".$ACCEPT
		);
 // creer la resource curl 
 $ch = curl_init();

 curl_setopt($ch,CURLOPT_URL,'https://api.stgfleet.com/positions/72077?dateFrom=2019-05-15&dateTo=2019-05-17');
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_POST,0);
 curl_setopt($ch, CURLOPT_HTTPHEADER,$Header_array1); 

 $response = curl_exec($ch);


 echo '<pre>';
 print_r($response);
 
 curl_close($ch);
 

?>

Je te remercie infiniment :!: :!:

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par saveus » 17 mai 2019, 17:55

ca ressemble a de l'authentification HTTP.
essaye peu être :
http://oseox.fr/curl/authentification-http.html

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par Saian » 17 mai 2019, 17:46

Soyons fous ^^
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json'
));

PS : il semblerait que ce soit comme avec l'autre requête tu as une ligne Accept qui liste probablement les content type acceptés :
Accept: application/vnd.telefleet-v1+json, application/vnd.telefleet-v1+xml, application/v1+json, application/v1+xml, application/x-www-form-urlencoded
Alors si application/json ne fonctionne pas tu peux tester aussi le application/vnd.telefleet-v1+json ou application/v1+json

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par Samsss » 17 mai 2019, 17:43

Salut saveus,

Dans mon code j'ai normalement donné les creditentials nécessaires pour se connecter. Mais si cUrl ne peut pas, alors qu'est-ce que je dois utiliser ??

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par Saian » 17 mai 2019, 17:42

D'après ce que je comprends de l'erreur 415, il faudrait peut être que tu définisses certains headers.
https://developer.mozilla.org/fr/docs/W ... Status/415

L'API ne vient-elle pas avec une documentation et des exemples de code php ?

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par Samsss » 17 mai 2019, 17:39

Salut @rthur,

Merci de ta réponse. Mais après avoir essayé le lien je n'obtiens rien.. Page blanche

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par Samsss » 17 mai 2019, 17:33

Salut,

Merci de cette réponse rapide, néanmoins en remplacant le 1 par 0 j'obtiens une autre erreur qui est :
- - -
HTTP/1.1 415
X-Application-Context: application:ma:8092
Accept: application/vnd.telefleet-v1+json, application/vnd.telefleet-v1+xml, application/v1+json, application/v1+xml, application/x-www-form-urlencoded
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Content-Length: 0
Date: Fri, 17 May 2019 15:07:36 GMT
Strict-Transport-Security: max-age=15768000; includeSubDomains
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
- - -

Après une petite recherche, j'ai trouvé que c'était un pb de format, ce que je n'ai pas très bien compris ..

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par @rthur » 17 mai 2019, 17:32

Si dans un navigateur web en navigation privée tu vas sur l'url :
https://LOGIN:[email protected] ... 2019-05-17
(en mettant bien évidemment le bon login et mdp)

Est-ce que tu as bien les données voulues ?

Si oui, alors le plus simple c'est même d'utiliser la fonction file_get_contents() plus besoin de s'embéter avec Curl : :D
<?php
$json = file_get_contents('https://LOGIN:[email protected]/positions/42898?dateFrom=2019-05-01&dateTo=2019-05-17');
var_dump($json);

Re: Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par Saian » 17 mai 2019, 17:02

Salut, pour le peu que je vois tu as un code HTTP 405 qui correspond à l'erreur "Method Not Allowed" et tu as un Allow: GET, alors peut être qu'en passant simplement ta requête en méthode GET avec un curl_setopt($ch,CURLOPT_POST, 0); au lieu de 1.

Erreur de récuperation de données depuis une API (HTTPS) avec PHP cUrl

par Samsss » 17 mai 2019, 16:53

Bonjour,

Actuellement en train de réaliser un projet, je dois extraire des données (localisation et Kilométrage, non exhaustif) depuis une API de localisation de voitures, qui suit le protocole HTTPS. Pour cela, je suis en train de travailler sur un script PHP me permettant :
- D'accéder à l'API (avec l'identifiant et le mdp)
- Récupérer les informations relatives aux véhicules en Json.
Malheureusement après de nombreuses tentatives je n'y arrive toujours pas... J'obtiens une réponse du style :
- - -
HTTP/1.1 100

HTTP/1.1 405
X-Application-Context: application:ma:8092
Allow: GET
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Content-Length: 0
Date: Fri, 17 May 2019 14:42:53 GMT
Strict-Transport-Security: max-age=15768000; includeSubDomains
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
- - -

Voici mon code :
<?php

 //url : https://api.stgfleet.com/positions/42898?dateFrom=2019-05-01&dateTo=2019-05-17  

 // creer la resource curl 
 $ch = curl_init();

 //$header = array('Content-Type: application/json');

 curl_setopt($ch,CURLOPT_URL,'https://api.stgfleet.com/positions/42898?dateFrom=2019-05-01&dateTo=2019-05-17');
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 curl_setopt($ch, CURLOPT_USERPWD, "XxxX:pwd");
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_POST,1);
 curl_setopt($ch, CURLOPT_HEADER,1); 

 $response = curl_exec($ch);


 echo '<pre>';
 print_r($response);
 
 curl_close($ch);
 

?>

Pouvez vous me donner des pistes de réflexion pour régler ça ?

Merci d'avance.