Question

Je suis face à un problème avec boucle que je ne peux pas émettre une demande de PUT avec des données XML inline, je ne sais pas comment le faire, mais je hade deux qui se passe avec des techniques différentes. D'abord, j'ai essayé d'utiliser l'CURLOPT_UPLOAD comme l'option CURL par défaut pour PUT et essayé d'ajouter les données XML manuellement:

    typedef map<string, string> headers_t;
    std::string strCommand = <XMLCOMMAND>

PUTRequest(param1, param2, ...)
    {
...
    headers_t headers;
    int nLen = strCommand.length();
    stringstream issLen;
        issLen << nLen;
        issLen >> strln;
    curl_easy_setopt(curl, CURLOPT_UPLOAD, true); // HTTP PUT
    headers.append("Content-Length: "+ strln); //
    headers.append(strCommand);
...
    }

Alors j'ai essayé la même méthode, mais en utilisant la CURLOPT_POSTFIELDS et CURLOPT_POSTFIELDSIZE au lieu d'ajouter manuellement la commande aux en-têtes HTTP .... ne fonctionne pas.

Alors j'ai essayé de personnaliser la demande PUT à l'aide du CURLOPT_CUSTOMREQUESToption et le réglage du paramètre à PUT et aussi annexant manuellement la commande et en utilisant la méthode POSTFIELDS.

Malheureusement pas travaillé et maintenant je suis aucune idée de ce qu'il faut essayer suivant.

Était-ce utile?

La solution

Lorsque vous utilisez CURLOPT_UPLOAD, vous le XML Annexer des en-têtes de la demande plutôt que sur le corps où il appartient. Vous devez utiliser CURLOPT_READDATA (avec CURLOPT_READFUNCTION si votre XML est pas dans un fichier) pour fournir les données XML en boucle demande, et également utiliser CURLOPT_INFILESIZE / CURLOPT_INFILESIZE_LARGE si boucle peut générer un en-tête approprié « Content-Length » (ne pas ajouter cet en-tête manuellement).

Si vous utilisez CURLOPT_POST, puis utilisez CURLOPT_POSTFIELDS et CURL_POSTFIELDSIZE / CURLOPT_POSTFIELDSIZE_LARGE pour fournir les données XML réelles, mais vous devez aussi utiliser CURLOPT_HTTPHEADER pour remplacer en-tête par défaut « Content-Type » de sorte que vous pouvez changer à partir de la valeur par défaut 'application / x-www-form-urlencoded' à 'text / xml' à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top