0

インラインXMLデータでPUTリクエストを発行できないため、curlの問題に直面しています。どのように実行されるかはわかりませんが、さまざまな手法で2、3回実行する必要がありました。まずCURLOPT_UPLOAD、PUTのデフォルトのCURLオプションとしてを使用して、xmlデータを手動で追加しようとしました。

    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);
...
    }

次に、同じ方法を試しましたが、HTTPヘッダーにコマンドを手動で追加する代わりにCURLOPT_POSTFIELDSandを使用しましたがCURLOPT_POSTFIELDSIZE、機能しませんでした。

次に、オプションを使用してPUT要求をカスタマイズしCURLOPT_CUSTOMREQUEST、パラメーターをPUTに設定し、コマンドを手動で追加してPOSTFIELDSメソッドを使用してみました。

悲しいことに、何も機能しませんでした、そして今、私は次に何を試すべきかについて無知です。

4

1 に答える 1

3

CURLOPT_UPLOADを使用する場合、XMLは、リクエストが属する本文ではなく、リクエストのヘッダーに追加されます。CURLOPT_READDATA(XMLがファイルにない場合はCURLOPT_READFUNCTIONを使用)を使用して、curlが要求したときにXMLデータを提供する必要があります。また、CURLOPT_INFILESIZE / CURLOPT_INFILESIZE_LARGEを使用して、curlが適切な「Content-Length」ヘッダーを生成できるようにする必要があります(しないでください)。そのヘッダーを手動で追加します)。

CURLOPT_POSTを使用する場合は、CURLOPT_POSTFIELDSおよびCURL_POSTFIELDSIZE / CURLOPT_POSTFIELDSIZE_LARGEを使用して実際のXMLデータを提供しますが、CURLOPT_HTTPHEADERを使用してデフォルトの「Content-Type」ヘッダーをオーバーライドし、デフォルト値の「application/」から変更できるようにする必要があります。代わりに、x-www-form-urlencoded'を'text/xml'に変更します。

于 2009-11-11T20:46:15.637 に答える