libcurl C++;添加http get参数 我对C++开发是新的,我一直在尝试用LIcCURL.工作。

libcurl C++;添加http get参数 我对C++开发是新的,我一直在尝试用LIcCURL.工作。,c++,libcurl,C++,Libcurl,我基本上是在寻找一个函数,它允许我输入类似于curl中的-d标志的参数 例如,如果我直接在curl或web浏览器中发送一个url请求,则url看起来像“” 那么,我如何才能将其提供给libcurl,而不仅仅是这个问题的公认答案中所建议的一个url: 但作为我可以添加的参数?我希望这个调用会自动“清理”文本(例如,支持字符串中的符号(&)和等号(=)。我肯定还有其他情况,但这是我目前唯一能想到的情况)。当然,我可以自己创建一个清理字符串的函数,但我想知道libcurl中是否内置了一个函数 我检查

我基本上是在寻找一个函数,它允许我输入类似于curl中的-d标志的参数

例如,如果我直接在curl或web浏览器中发送一个url请求,则url看起来像“”

那么,我如何才能将其提供给libcurl,而不仅仅是这个问题的公认答案中所建议的一个url:

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

我检查了api文档,但我认为我不够熟悉,无法成功地浏览它以找到我需要的东西


谢谢你抽出时间

你不能。您需要指定完整的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
typedef std::map参数;
静态标准::字符串参数字符串(参数常量和参数)
{
if(params.empty())返回“”;
Params::const_迭代器pb=Params.cbegin(),pe=Params.cend();
std::string data=pb->first+“=”+pb->second;
++pb;如果(pb==pe)返回数据;
对于(;pb!=pe;++pb)
数据+=“&”+pb->第一个+“=”+pb->第二个;
返回数据;
}
// ...
auto str=get(“where.com?”+参数字符串({{“q”,“C++”},{“img”,“true”}));
//让您编写漂亮的API客户端
  • 如前所述,包含GET参数的完整URL必须手动构建
  • 健全性检查,如剥离前导或尾随空格,不是libcurl的责任
  • 对可使用的参数的(净化)值进行URL编码。无论如何,部分应该在您的手中

  • 映射非常适合管理参数,但是您是如何解决“清理”字符串的问题的?我们是必须自己做呢,还是libcurl中有一些预构建的东西?@ThinkBonobo如果你是说检查参数是否正常,那么有很多事情要做。您必须检查它们是否表示正确的数据类型、带空格,甚至可能防止注入。因为大多数参数都需要自定义验证,所以最好是手工验证。这与您提到的原因非常相似,需要处理这么多事情,以至于我感到惊讶的是,没有任何函数可以解决更常见的问题,特别是注入攻击、字符替换和空间剥离。当然,总是需要自定义验证,但是拥有处理“样板文件”的函数还是不错的。谢谢你的帮助!Ivan的回答很好,但图书馆的建议肯定会帮助其他希望解决这个问题的人,就像我一样。