libcurl C ++添加http get参数

时间:2013-11-14 13:29:04

标签: c++ libcurl

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

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

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

然后我怎么能把它作为libcurl提供给它而不仅仅是这个问题的接受答案中建议的一个网址: Add paramethers to libcurl GET in c++

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

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

感谢您的时间

3 个答案:

答案 0 :(得分:3)

  1. 如前所述,必须手动构建包含GET参数的完整URL。
  2. 彻底检查,如剥离前导或尾随空格,不是libcurl的责任。
  3. 对参数的(已消毒的)部分进行网址编码,您可以使用curl_easy_escape。无论如何,部分应该在您手中。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我只是在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