gpt4 book ai didi

c++ - libcurl:curl_easy_perform block ,除非设置了 CURLOPT_READFUNCTION

转载 作者:行者123 更新时间:2023-11-28 04:39:24 28 4
gpt4 key购买 nike

我正在尝试使用 libcurl C++ 发出 REST/HTTP 请求。我注意到 curl_easy_perform block ,但如果我设置 CURLOPT_READFUNCTION 它不会。我只是想了解为什么会这样,我是 libcurl 或 HTTP/REST 协议(protocol)的新手。

代码如下:

m_pCurl = curl_easy_init();
curl_easy_setopt(m_pCurl, CURLOPT_URL, "https://blahblahblah/api/auth/user/login");
curl_easy_setopt(m_pCurl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(m_pCurl, CURLOPT_POST, 1);
curl_easy_setopt(m_pCurl, CURLOPT_COOKIE, "SKEY=BLAHBLAHBLAH");

struct curl_slist *list = NULL;

list = curl_slist_append(list, "Accept: application/json");
list = curl_slist_append(list, "Connection: keep-alive");
list = curl_slist_append(list, "Expect:");
list = curl_slist_append(list, "Content-Type: application/json");
list = curl_slist_append(list, "x-website-parameters: LALALALA");
curl_easy_setopt(m_pCurl, CURLOPT_HTTPHEADER, list);

// Callbacks
readarg_t rarg;

// readcb is a callback function
// Removing the two lines below will cause curl_easy_perform to hang
curl_easy_setopt(m_pCurl, CURLOPT_READFUNCTION, readcb);
curl_easy_setopt(m_pCurl, CURLOPT_READDATA, &rarg);

CURLcode res = curl_easy_perform(m_pCurl);

注意:部分编码数据在上面发生了变化。

如有任何帮助,我们将不胜感激。

谢谢,K

最佳答案

根据 The Manual ...

CURLOPT_READFUNCTION explained

...

If you set this callback pointer to NULL, or don't set it at all, the default internal read function will be used. It is doing an fread() on the FILE * userdata set with CURLOPT_READDATA.

但是你也没有设置CURLOPT_READDATA。所以再看The manual ...

CURLOPT_READDATA explained

...

By default, this is a FILE * to stdin.

所以您的程序“挂起”的原因似乎是因为它正在等待某些东西到达标准输入 stdin

所以它应该是这样工作的。

1) 如果您什么都不做,发送到服务器的数据来自标准输入(通常是键盘)。

2) 如果您设置 CURLOPT_READDATA 那么它必须是一个FILE* 您打开了一个输入文件,其中包含您要发送的数据。

3) 如果您设置了CURLOPT_READFUNCTION,那么CURLOPT_READDATA 可以指向您的函数完成其任务所需的任何内容向服务器发送数据。

关于c++ - libcurl:curl_easy_perform block ,除非设置了 CURLOPT_READFUNCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50573092/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com