C++ 使用xml数据进行CUrl-PUT

C++ 使用xml数据进行CUrl-PUT,c++,http,curl,libcurl,C++,Http,Curl,Libcurl,我面临着curl的一个问题,因为我无法使用内联XML数据发出PUT请求,我不确定它是如何完成的,但我使用了一些不同的技术。首先,我尝试使用CURLOPT_UPLOAD作为PUT的默认CURL选项,并尝试手动附加xml数据: typedef map<string, string> headers_t; std::string strCommand = <XMLCOMMAND> PUTRequest(param1, param2, ...) { ..

我面临着curl的一个问题,因为我无法使用内联XML数据发出PUT请求,我不确定它是如何完成的,但我使用了一些不同的技术。首先,我尝试使用
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);
...
    }
typedef映射头\u t;
std::string strCommand=
PUTRequest(参数1,参数2,…)
{
...
标题\u t标题;
int nLen=strCommand.length();
斯特林斯莱恩;
issLen>strln;
curl_easy_setopt(curl,CURLOPT_UPLOAD,true);//HTTP PUT
headers.append(“内容长度:+strln”)//
headers.append(strCommand);
...
}
然后我尝试了同样的方法,但是使用
CURLOPT\u POSTFIELDS
CURLOPT\u POSTFIELDSIZE
而不是手动将命令附加到HTTP头中。。。。不起作用

然后,我尝试使用
CURLOPT_CUSTOMREQUEST
选项自定义PUT请求,并将参数设置为PUT,同时手动附加命令并使用POSTFIELDS方法


遗憾的是,这些都不起作用,现在我不知道下一步该做什么。

当使用CURLOPT_UPLOAD时,您将XML附加到请求的标题,而不是它所属的正文。您需要使用CURLOPT_READDATA(如果您的XML不在文件中,则使用CURLOPT_READDATA函数)在curl请求时提供XML数据,还需要使用CURLOPT_infiresize/CURLOPT_infiresize_LARGE,以便curl可以生成适当的“内容长度”标题(不要手动附加该标题)


如果使用CURLOPT_POST,则使用CURLOPT_POSTFIELDS和CURL_POSTFIELDSIZE/CURLOPT_POSTFIELDSIZE_LARGE提供实际的XML数据,但是,您还必须使用CURLOPT_HTTPHEADER来覆盖默认的“Content Type”头,这样您就可以将其从默认值“application/x-www-form-urlencoded”改为“text/xml”。

使用CURLOPT_UPLOAD时,您将xml附加到请求的头上,而不是请求所属的主体上。您需要使用CURLOPT_READDATA(如果您的XML不在文件中,则使用CURLOPT_READDATA函数)在curl请求时提供XML数据,还需要使用CURLOPT_infiresize/CURLOPT_infiresize_LARGE,以便curl可以生成适当的“内容长度”标题(不要手动附加该标题)

如果使用CURLOPT_POST,则使用CURLOPT_POSTFIELDS和CURL_POSTFIELDSIZE/CURLOPT_POSTFIELDSIZE_LARGE来提供实际的XML数据,但还必须使用CURLOPT_HTTPHEADER来覆盖默认的“Content Type”头,以便将其从默认值“application/x-www-form-urlencoded”改为“text/XML”