c++ - curl 发布空对象

标签 c++ http curl post libcurl

我使用了 curl 帮助中的示例代码,但服务器收到空对象和空自定义 header 。 GET 方法工作正常。 strbuf.GetString() - 它是转换为 String 的 json 对象。

CURL *curl;
CURLcode res;
struct WriteThis pooh;
res = curl_global_init(CURL_GLOBAL_DEFAULT);
struct curl_slist *headers=NULL; 
curl_slist_append(headers, "Accept: application/json");  
curl_slist_append( headers, "Content-Type: application/json");
curl_slist_append( headers, "charset: utf-8"); 
curl_slist_append( headers, "AuthToken: 9BA1B05482567E64037573FFB68672DCB52E4993"); 
curl = curl_easy_init();
if (curl) 
{
  pooh.readptr = strbuf.GetString();
  pooh.sizeleft = (long)strlen(strbuf.GetString());
  curl_easy_setopt(curl, CURLOPT_URL, url);
  curl_easy_setopt(curl, CURLOPT_POST, 1L);
  curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
  curl_easy_setopt(curl, CURLOPT_READDATA, &pooh);
  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); 
  curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writer);
  curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, &pooh);
  curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, pooh.sizeleft);
  res = curl_easy_perform(curl);
  if (CURLE_OK == res) 
  { 
    char *ct;         
    res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
    if((CURLE_OK == res) && ct){    

                         }
  }
curl_easy_cleanup(curl);
}
curl_global_cleanup();

struct WriteThis {
    const char *readptr;
    long sizeleft;
};

static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
{
    struct WriteThis *pooh = (struct WriteThis *)userp;

    if(size*nmemb < 1)
        return 0;

    if(pooh->sizeleft) {
        *(char *)ptr = pooh->readptr[0]; /* copy one single byte */ 
        pooh->readptr++;                 /* advance pointer */ 
        pooh->sizeleft--;                /* less data left */ 
        return 1;                        /* we return 1 byte at a time! */ 
    }

    return 0;                          /* no more data left to deliver */ 
}

最佳答案

  1. 同时设置了读取回调和CURLOPT_POSTFIELDS。那没有用。您需要决定以何种方式提供数据。在这种情况下,我相信它会使用 POSTFIELDS 并忽略读取回调。

  2. 您传递给 CURLOPT_POSTFIELDS 的指针不是字符串,因此 libcurl 将从那里发送有趣的二进制“垃圾”。您可能想在那里传递 pooh.readptr

关于c++ - curl 发布空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39189901/

相关文章:

c++算法将整数转换为bool数组

c++ - boost ,使用 tcp 通过网络发送文件,首选方法?

spring-boot - Spring CSRF保护场景?

php - 强制 javascript 生成的内容显示自身

http - 如何在不使用 curl 的情况下通过 post 调用将数据发送到 influxdb?

c++ - 删除对 MFC DLL 项目的外部依赖

c++ - 使用了危险的魔数(Magic Number) N

http - 当我尝试通过简单的 HTTP 读取提要时,新的 Mule 版本 3.7.0 出现超时异常

javascript - 如何使用 Ajax 连接到 Java servlet?

php - 按计划部署 Azure 云服务