在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
Using CURL in C++/C to issue a GET HTTP Request with a data file
在命令行中使用 CURL:
curl -d @%1 -X 获取 https://blah-blah
这是在Windows批处理文件中,我在命令行上传递文件的名称。使用它,我可以在包含大量输入参数的文件中发出服务调用,并收到大量输出。
对于我的生活,当我尝试pro\语法时,我无法让它工作。它必须是可能的,因为它可以在命令上完成。但是,当我设置
curl_easy_setopt(m_Curl, CURLOPT_HTTPGET, 1);
即使设置了回调,我也无法上传文件
如果我使用:
curl_easy_setopt(m_Curl, CURLOPT_UPLOAD, 1L);
调用变为"PUT",即使我尝试强制标头为 GET。我遵循文档,可以看到这是记录的行为。但是,避免这种违约的途径是什么?
任何指导将不胜感激。
谢谢
斯坦
AFAIK 这不是严格禁止的,但你不应该发送带有 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);
}
您还可以使用 CURLOPT_POSTFIELDS 命令将正文粘贴为字符串。之后,您将请求更改为 GET,就像@Thomas Sablik 的答案一样。
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
// Set target URL
curl_easy_setopt(curl, CURLOPT_URL, requestURL.c_str());
// Set HTTP version
curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, (long) CURL_HTTP_VERSION_3);
// Set POST fields
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestBody.c_str());
// Set request to get
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
// Set response target
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
// Perform CURL request
CURLcode res = curl_easy_perform(curl);
相关文章:
- C++数据文件、数组和计算赋值
- 数据文件的第二行未正确读取
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 将数据文件读入结构 C++
- 引入流时C++数据文件未正确读取?
- 如何在数据文件中查找和显示内容
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- 尝试读取数据文件,存储在数组中并打印所有元素,但它不起作用
- 将数据文件读入对象数组时出现问题
- C :数据文件有错误:预期的无限制ID
- C 和 C++:带有错误"Expected unqualified-id"的数据文件
- 如何在C 中读取一系列数据文件
- 从数据文件中读取每2个字节,并在向量中进行比较
- 写入单个大数据文件或多个小文件:哪个更快?
- 在读取数据文件时,如何找到用户字符串输入的字谜?
- 保护外部数据文件免受未经授权的修改
- C 读取数据文件
- C 如何将数据文件读取到结构或向量以及返回结构或向量
- 具有挑战性的数据文件格式,需要将其读取为包含类对象的数组的VAR
- C 中的Google单元测试:如何编写持久数据文件