libcurl C++添加 HTTP get 参数

libcurl C++ adding http get parameters

本文关键字:get 参数 HTTP 添加 C++ libcurl      更新时间:2023-10-16

我是C++开发的新手,我一直在尝试使用libcurl。

我基本上正在寻找一个函数,让我输入类似于 curl 中 -d 标志的参数。

例如,如果我只是直接在 curl 或 Web 浏览器中发送 url 请求,则 url 看起来像"https://www.example.com/hello.json?whoisawesome=me&whosucks=yomomma"

那么我怎么能把它提供给 libcurl,而不是像这个问题的接受答案中建议的那样只是一个 URL:在 c++ 中将参数添加到 libcurl GET 中

但作为我可以添加的参数?我希望调用会自动"清理"文本(例如,在字符串中支持与号 (&) 和等号 (=)。我敢肯定还有其他情况,但这是我目前能想到的唯一情况)。当然,我可以自己创建一个清理字符串的函数,但我想知道libcurl中是否内置了一个函数。

我检查了 api 文档,但我觉得我不够熟悉,无法成功导航它以找到我需要的东西。

感谢您抽出宝贵时间

  1. 如前所述,包含GET参数的完整URL必须手动构建。
  2. 健全性检查,如剥离前导或尾随空格,不是 libcurl 的责任。
  3. 若要对参数的(净化)部分进行 URL 编码,您可以使用curl_easy_escape。无论如何,关键部分应该在你手中。

你不能。您需要指定完整的 url,这意味着它不仅包含服务器名称,还包含架构、路径、端口和查询(即您的 GET 参数)。我认为这是唯一不疯狂的方式。

我只是在 C++11 中使用这样的东西:

typedef std::map<std::string, std::string> Params;
static std::string params_string(Params const &params)
{
  if(params.empty()) return "";
  Params::const_iterator pb= params.cbegin(), pe= params.cend();
  std::string data= pb-> first+ "="+ pb-> second;
  ++ pb; if(pb== pe) return data;
  for(; pb!= pe; ++ pb)
    data+= "&"+ pb-> first+ "="+ pb-> second;
  return data;
}
// ...
auto str= get("where.com?"+ params_string({ {"q", "C++"}, { "img", "true" } }));
// lets you write pretty API clients