c++ - 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求

标签 c++ curl get

在命令行中使用 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/

相关文章:

c++ - 从 Delphi 生成 .obj 文件

amazon-web-services - 使用 Curl(通过低级 API)将记录插入亚马逊的 DynamoDB

google-app-engine - 在应用引擎上 curl

ruby-on-rails - 进入 Rails - 接收带参数的 get 请求并重定向它们

c++ - 在定义中使用 typedef 类型

c++ - 在 C++ 中输出 Enum 类类型的 vector 元素

c++ - C++ 在执行多态性时是否接受内联虚函数?

php - 如何将此 cURL 代码转换为 PHP(PayPal API)

python - 如何获取通过 url 传递的列表?

c++ - 模板化函数在返回值时崩溃