[RESOLU] problème pour envoyer un fichier json avec curl(POST)

Petit nouveau ! | 8 Messages

20 déc. 2013, 13:40

Bonjour à tous,
Je viens vers vous avec un sérieux problème.
Voila je tente d'envoyer un fichier au format json a un serveur distant avec la fonction curl (methode post)
mais le problème est qu'il me retourne bad requeste (400) , pourtant j'ai bien mis les options necessaires a la fonction curl.
SVP! aidez moi.

le contenu du fichier json:
{"ordersRequest":{ "orders":{ "order":[{"comment":"zee",
"orderId":4461,
"status":"Cancelled"}]}}}
//le script

$headers = array(
"Accept:application/json",
"Content-type:application/json",
);
$data=array('fichier'=>'fichier.json');
/*initialisation de la session*/
$ch = curl_init();
// /*configuration des options*/
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
/*exécution de la session*/
$sCurlResponse = curl_exec($ch);
curl_close ($ch);
var_dump($sCurlResponse);
Voici le message d'erreur et les informations de l'entête http

HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 20 Dec 2013 11:26:18 GMT
Content-Length: 57

[{"message":"Input string was not in a correct format."}]

Merci d'avance pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 déc. 2013, 00:21

salut,

l'erreur 400 s'explique par le message en bas
[{"message":"Input string was not in a correct format."}]
et c'est normal car ce que tu passe ce n'est pas du JSON mais une chaîne de caractère.

dans ton code tu construis le tableau de données ainsi
$data=array('fichier'=>'fichier.json');
du coup tu envois la chaine de caractère fichier.json et non le contenu du fichier.

pour cela tu peux utiliser la fonction file_get_contents

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

23 déc. 2013, 11:51

Salut,
Merci pour ta réponse.
J'ai utilisé la fonction file_get_contents() pour recuperer le contenu du fichier,mais le problème est que j'obtiens le même message d'erreur malgré que cette fois-ci c'est bien le contenu du fichier que j’envoie.
a+

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 déc. 2013, 12:18

quel est le code utilisé ?

Vu que l'on ne peux pas deviner c'est compliqué.

Regarde la documentation de l'api du webservice peux être y a t'il un paramètre que tu as oublié.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

23 déc. 2013, 15:02

Voila le code que j'utilise.
Je pense que je vais revoir également la documentation de l'API.

$file = realpath('fichier.json');
// Écrit le résultat dans le fichier
file_put_contents($file, $tableauJson);
$data=file_get_contents($file);

//recuperation de la date courante
$dateFormat="D, d M Y H:i:s";
$timeNdate=gmdate($dateFormat, time());
$cle='102224fa-b9ed-4c41-b4f5-41efba561288';
$api='aa15e3f0-08f2-41f3-8d20-009b3f546f27';
$signature = hash_hmac('sha1',(string)$timeNdate,'102224fa-b9ed-4c41-b4f5-41efba561288',true);
$enco=base64_encode($signature);
$headers = array(
"API-id:".$api,
"GMT-date:".$timeNdate,
"Request-signature:".$enco,
"Accept:application/json",
"Content-type:application/xml",
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER,true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
$result=curl_exec($ch);
curl_close ($ch);
echo '</br>';
var_dump($result);

Merci