IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau Discussion :

Requête POST pour envoyer du JSON


Sujet :

Réseau

  1. #1
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut Requête POST pour envoyer du JSON
    Bonjour,

    alors voilà j'ai un petit soucis pour effectuer l'envoie d'un fichier JSON sur un serveur par requête POST. Tout d'abord, je vous donne un extrait compilable de ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include <iostream>
     
    #include <QCoreApplication>
     
    #include <QFile>
     
    #include <QJsonArray>
    #include <QJsonObject>
    #include <QJsonDocument>
     
    #include <QNetworkAccessManager>
    #include <QNetworkReply>
    #include <QUrl>
    #include <QCommandLineParser>
     
    int main(int argc, char *argv[])
    {
      QCoreApplication a(argc, argv);
     
      QByteArray jsonDocument("{}");
     
      QUrl url("http://validate.jsontest.com/?json=");
      QNetworkRequest request(url);
      request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
     
      QNetworkAccessManager manager;
      QNetworkReply* reply = manager.post(request, jsonDocument);
     
      while(!reply->isFinished()) {
        a.processEvents();
      }
     
      std::cout << "Ok, Server response : " << response.toStdString() << std::endl;
     
      return 0;
    }
    Donc comme cela ne fonctionne pas sur le serveur sur lequel je dois bosser, je préfère pour l'instant comme dans l'exemple tester sur un truc comme http://validate.jsontest.com ; donc techniquement je lui envoie un truc JSON et il doit me dire si il est valide. Dans le cas de l'exemple, j'envoie un objet vide donc valide. MAIS comme toujours avec mon bout de code j'ai un soucis d'envoie de la donnée...

    Réception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Ok, Server response : {
       "error": "A JSONObject text must begin with '{' at 1 [character 2 line 1]",
       "object_or_array": "object",
       "error_info": "This error came from the org.json reference parser.",
       "validate": false
    }
    ALORS que si je le fais classiquement avec la commande curl comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    curl -X POST -d "json={}"  http://validate.jsontest.com
    on obtient bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
       "object_or_array": "object",
       "empty": true,
       "parse_time_nanoseconds": 10874,
       "validate": true,
       "size": 0
    }
    donc il doit me manquer un élément de compréhension dans mon code... si quelqu'un pouvait m'éclairer ça serait GENIAL

    Merci d'avance !!!

  2. #2
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    Le problème venait que le serveur sur lequel je dois envoyer mes données ainsi que celui pour faire des tests http://www.jsontest.com/ demande l'envoie des données JSON à l'aide d'un paramètre particulier... par exemple pour jsontest.com c'est le paramètre json donc je dois "forger" ma requête ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QByteArray jsonDocument("json={\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": {\"minuend\": 42, \"subtrahend\": 23}, \"id\": 3}");
    De plus, j'ai dû remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    voilà maintenant cela fonctionne correctement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête POST/JSON en Java pour mailchimp
    Par skenk dans le forum Services Web
    Réponses: 0
    Dernier message: 26/11/2015, 14h36
  2. Réponses: 6
    Dernier message: 09/08/2010, 13h28
  3. Réponses: 6
    Dernier message: 11/07/2008, 09h34
  4. [Prototype] Utiliser Json pour envoyer des données au serveur
    Par GandalfZeGrey dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 14/02/2008, 17h16
  5. Comment envoyer une requête POST via HTTP ?
    Par pdtor dans le forum C++
    Réponses: 2
    Dernier message: 13/09/2005, 05h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo