Page 1 sur 1

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

Posté : 17 mai 2019, 16:53
par Samsss
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.

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

Posté : 17 mai 2019, 17:02
par Saian
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.

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

Posté : 17 mai 2019, 17:32
par @rthur
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

Posté : 17 mai 2019, 17:33
par Samsss
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

Posté : 17 mai 2019, 17:39
par Samsss
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

Posté : 17 mai 2019, 17:42
par Saian
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

Posté : 17 mai 2019, 17:43
par Samsss
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

Posté : 17 mai 2019, 17:46
par Saian
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

Posté : 17 mai 2019, 17:55
par saveus
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

Posté : 17 mai 2019, 17:56
par Samsss
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

Posté : 17 mai 2019, 17:57
par @rthur
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 ;-)