在命令行中使用 CURL:
curl -d @%1 -X GET https://blah-blah
这是一个 Windows 批处理文件,我在命令行上传递了该文件的名称。使用它,我可以发出一个服务调用,发送一个带有大量输入参数的文件,并且我收到大量输出。
对于我的生活,当我尝试使用语法时,我无法让它工作。这一定是可能的,因为它可以通过命令完成。但是,当我设置
curl_easy_setopt(m_Curl, CURLOPT_HTTPGET, 1);
即使设置了回调,我也无法上传文件
如果我使用:
curl_easy_setopt(m_Curl, CURLOPT_UPLOAD, 1L);
即使我尝试强制 header 为 GET,调用也会变成“PUT”。我遵循文档,可以看到这是记录的行为。然而,避免这种默认的途径是什么?
任何指导将不胜感激。
谢谢
斯坦
最佳答案
据我所知,这并不是严格禁止的,但您不应该通过 GET 请求发送正文。另一方面,服务器应该能够处理带有正文的 GET 请求,但响应不应依赖于正文的内容。
如果您确实需要使用 GET 发送包含正文的请求,您可以使用 CURLOPT_CUSTOMREQUEST
更改方法的值。这不会改变 curl 的行为。此代码段将使用 GET 上传数据:
CURL* curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_PORT, port);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
const auto* file = fopen(filename.c_str(), "r");
curl_easy_setopt(curl, CURLOPT_READDATA, file);
curl_easy_setopt(
curl, CURLOPT_INFILESIZE_LARGE, static_cast<curl_off_t>(filesize));
curl_easy_perform(curl);
}
关于c++ - 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62012186/