在 MVSC 中为 cURL 创建字符串流

标签 c visual-studio-2012 curl stream

我在 C 中使用 cURL,并且希望将页眉和正文写入内存而不是文件:

static size_t writeData(void *ptr, size_t size, size_t nmemb, void *stream)
{
  int written = fwrite(ptr, size, nmemb, (FILE *)stream);
  return written;
}

This thread详细介绍了如何使用 C++ 实现此操作,以及 this thread在 GCC 中执行此操作的详细信息。

据我所知( herehere ),在 MVSC 中无法做到这一点 - 或者不容易。

如果不是用 cURL 库的某些函数替换文件流,那么肯定有某种方法可以做到这一点?也许有某种方法可以绕过指向传递的流的指针?我被难住了!

最佳答案

您链接的第一个问题确切地展示了如何做到这一点。你不需要任何花哨的东西。如果您使用 C++,则最好使用 stringstream。如果没有,您可以使用普通 auld memcpy 附加到缓冲区。

struct buffer {
   void *mem;
   size_t size;
};

....
struct buffer b = {0};
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &b);


static size_t writeData(void *ptr, size_t size, size_t nmemb, void *data)
{
    void *mem;
    struct buffer *b = data;

    /* Save old size and try to realloc buffer. */
    size_t oldsize = b->size;
    b->size += size * nmemb;
    if (!(mem = realloc(b->mem, b->size))) {
        /* realloc failed, handle error. */
    }

    /* If realloc worked, just append. */
    b->mem = mem;
    mempy(b->mem + oldsize, ptr, nmemb * size);
}

此代码未经测试,但解决问题应该相当容易。

关于在 MVSC 中为 cURL 创建字符串流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22655248/

相关文章:

c - 如何在 Ubuntu 中为终端添加特定用途的命令行参数?

c - 添加节点时如何重置指向头节点的指针?

c - 如何在setsockopt - C,Linux中删除TCP_MD5SIG设置的授权?

visual-c++ - Visual Studio 确定字节顺序

shell - 来自curl输出的Grep状态代码

java - Spring OAuth2 : InsufficientAuthenticationException

c - UNIX下如何使用(C)将文件从一个文件夹传输到另一个文件夹?

asp.net - 我可以在不安装 SQL Server 的情况下拥有数据库吗?

asp.net - 开源开发过程中如何混淆数据库认证信息?

python - 在Python中执行cURLs命令行