curl_multi_add_handle和curl_multi_perform之间的标头内容类型发生变化
header content-type changes between curl_multi_add_handle and curl_multi_perform
我在c++应用程序中创建了一个带有标题的cURL帖子:
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &bufferdata);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writerResponse);
struct curl_slist *headers=NULL;
char outputmessage[]="";
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers );
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cJSONstring.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, cJSONstring.length());
curl_easy_setopt(curl, CURLOPT_VERBOSE,1);
curl_easy_setopt(curl, CURLOPT_HEADER,1);
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
curl_multi_add_handle(m_telemetryCurlm, curl);
我创建了一个线程来调用multiperform:
void ContentManager::processTelemetry()
{
m_telemetryThreadRunning = true;
while(m_telemetryThreadRunning)
{
static_cast<ADCAnalytics*>(m_adcAnalytics)->performTelemerty();
usleep(5000);
}
}
void ADCAnalytics::performTelemerty()
{
// number of active downloads
int counter = 0;
// preform downloading
curl_multi_perform(m_telemetryCurlm, &counter);
// handle CURL actions (connection errors, download finish, etc.)
checkCURLMessages();
}
但当我查看卷曲信息时,我会收到:
12-10 13:23:00.845:I/ADC(17248):缓冲区=HTTP/1.1 400错误请求
12-10 13:23:00.845:I/ADC(17248):X-TraceUrl:/appstats/details?时间=135145806563&type=json
12-10 13:23:00.845:I/ADC(17248):内容类型:文本/纯
12-10 13:23:00.845:I/ADC(17248):变化:接受编码
12-10 13:23:00.845:I/ADC(17248):日期:2012年12月10日星期一13:23:26 GMT
12-10 13:23:00.845:I/ADC(17248):服务器:谷歌前端
12-10 13:23:00.845:I/ADC(17248):缓存控制:专用
12-10 13:23:00.845:I/ADC(17248):传输编码:分块
内容类型似乎在curl_multi_add_handle和curl_multi_perform之间发生了更改。有人知道这里出了什么问题吗?如何避免内容类型发生更改?
添加以下代码时
do {
while(curl_multi_perform(m_telemetryCurlm, &still_running) ==CURLM_CALL_MULTI_PERFORM);
} while (still_running);
在设置cURL对象之后立即执行。请求被发送到服务器,我得到
12-10 13:11:48.105:I/ADC(16845):缓冲区=HTTP/1.1 200 OK
12-10 13:11:48.105:I/ADC(16845):X-TraceUrl:/appstats/details?时间=135145133776&type=json
12-10 13:11:48.105:I/ADC(16845):内容类型:application/json
12-10 13:11:48.105:I/ADC(16845):变化:接受编码
12-10 13:11:48.105:I/ADC(16845):日期:2012年12月10日星期一13:12:13 GMT
12-10 13:11:48.105:I/ADC(16845):服务器:谷歌前端
12-10 13:11:48.105:I/ADC(16845):缓存控制:专用
12-10 13:11:48.105:I/ADC(16845):传输编码:分块
所以,我不认为服务器端有什么问题。
感谢
您不是在比较发送的内容类型和接收的内容类型吗?
- 在C++中使用cURL和多线程
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 如何检查cURL是否成功登录?c ++
- 带有进度表的 curl 多接口程序
- 使用 CURL 上传构建
- 使用 curl_easy_cleanup(curl) 时收到未经处理的 NULL 异常
- Curl with vcpkg
- curl 请求的用户输入
- 如何使用 curl 将 POST 请求从 python 重写为 C++
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- boost beast Websocket Multi Request Server/Client 并不是真正的 mul
- 如何将带有 -F 选项的 curl 命令转换为 libcurl
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)
- C++ CURL 库链接器错误,但包含正确的库
- C++中的 cURL POST 请求
- c++curl返回413请求实体过大,但是post大小远小于max大小
- 如何在 curl 代码C++设置授权持有者标头?我得到的授权不足,即使它在命令行上工作
- c++如何使用Curl Multi-Interface连续循环
- 在 R 中调用"multi file C++ code with external libraries referenced"