4

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

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

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

那么我怎么能把它提供给 libcurl 而不是这个问题的公认答案中建议的一个 url: Add paramethers to libcurl GET in c++

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

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

谢谢你的时间

4

3 回答 3

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

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

于 2013-11-14T13:46:38.107 回答
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
于 2013-11-14T14:06:18.283 回答