Problème pour envoyer un fichier json avec curl(POST)

Résolu/Fermé
stgcici Messages postés 51 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 18 février 2014 - 20 déc. 2013 à 14:11
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 20 déc. 2013 à 17:16
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Ãf©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.

stgcici
Embryon

Messages: 6
Inscription: 27 Nov 2013, 12:01
A voir également:

2 réponses

Utilisateur anonyme
20 déc. 2013 à 14:32
Bonjour

Pas sûr, mais il me semble qu'il faut une espace après le ":" dans :
"Accept: application/json", 
"Content-type: application/json", 
1
stgcici Messages postés 51 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 18 février 2014 1
20 déc. 2013 à 15:28
ok.
Merci pour ta réponse.
je vais de se pas apporté les modifs voir ce que sa donne.
0
Utilisateur anonyme
20 déc. 2013 à 15:30
N'oublie pas de tenir compte de la remarque de Pitet, qui a l'air de connaître le sujet bien mieux que moi.
0
stgcici Messages postés 51 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 18 février 2014 1
20 déc. 2013 à 15:44
hélas! le problème n'est pas résolu.
Merci.

Au faite ce que je veux faire c'est de récupérer des infos d'une base de données et de les formatées au format json et l'enregistrer dans un fichier afin de l'envoyer au serveur.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
20 déc. 2013 à 14:58
Salut,

D'après le message d'erreur, les données que tu envois ne sont pas dans le bon format.

Si je comprend bien, tu dois envoyer le contenu de ton fichier json. Mais dans ton code la variable $data ne contient que le nom du fichier et pas son contenu.
1
stgcici Messages postés 51 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 18 février 2014 1
20 déc. 2013 à 15:38
salut.
C'est vrai mais ce que je veux faire c'est de pouvoir envoyer le fichier contenant les informations au serveur.Puis ce que la variable $data contient le nom du fichier je suppose que le fichier contient les infos que je veux envoyer.

Au faite ce que je veux faire c'est de récupérer des infos d'une base de données et de les formatées au format json et l'enregistrer dans un fichier afin de l'envoyer au serveur.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
20 déc. 2013 à 16:36
Pourquoi enregistrer des données dans un fichier si elles proviennent d'une base de données ?

Le plus simple étant de :
1 - se connecter à la bdd et exécuter la requête pour récupérer les informations à envoyer
2 - utiliser la fonction json_encode() pour encoder les données récupérées au format json
3 - stocker les données au format json dans la variable $data pour l'envoyer au serveur via cUrl
0
stgcici Messages postés 51 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 18 février 2014 1
20 déc. 2013 à 16:56
J'avais utiliser la fonction json_encode($valeur) pour encoder directement les données recupére dans la BD pour l'envoyer au serveur.
Mais le problème est le format json des données encodé avec json_encode() ne correspond pas au format json attendu par le serveur(au faite avec json_encode les données sont sous la forme ["valeur1","valeur2",....,"valeurn"] pourtant le format que moi je veux c'est par exemple [{"nom1":"valeur1","nom2":"valeur2}]").
Du coup je suis obliger de moi même construire mon fichier json avec les données de la BD.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 20/12/2013 à 17:17
le format json des données encodé avec json_encode() ne correspond pas au format json attendu par le serveur
Il n'existe qu'un seul format json, il ne devrait pas y avoir de problème à ce niveau. Regarde les exemples de cette page pour comprendre comment obtenir le format que tu souhaites (encodage d'un tableau vs objet) : https://www.php.net/manual/fr/function.json-encode.php

En mettant la fonction json_encode() de coté, as tu vraiment besoin d'utiliser un fichier pour construire des données post ? Pourquoi ne pas directement les stocker dans la variable php $data ?

Supposons encore que tu souhaites conserver ton fichier, il faut dans ce cas que tu récupères le contenu de ce fichier pour le stocker dans la variable $data (qui correspond aux données envoyées en post). Pour récupérer le contenu de ton fichier, tu peux utiliser la fonction file_get_contents().
0