【问题标题】:libcurl C++ adding http get parameterslibcurl C++ 添加 http 获取参数
【发布时间】:2013-11-27 12:57:18
【问题描述】:

我是 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 文档,但我猜我不够熟悉,无法成功导航以找到我需要的内容。

感谢您的宝贵时间

【问题讨论】:

    标签: c++ libcurl


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 地图很好地管理参数,但你是如何解决“清理”字符串的问题的?我们只需要自己做还是 libcurl 中预置了一些东西?
      • @ThinkBonobo 如果您的意思是检查参数是否健全,有很多事情要做。您必须检查它们是否代表正确的数据类型、去除空格,甚至可能防止注入。由于大多数参数都需要自定义验证,因此最好手动完成。
      • 这和你提到的原因一样,需要处理这么多事情,我很惊讶没有功能可以清理更常见的问题,特别是注入攻击、字符替换和空间剥离。当然,总是需要自定义验证,但拥有处理“样板”的功能仍然会很好。感谢您的帮助!
      【解决方案3】:
      1. 如前所述,必须手动构建包含 GET 参数的完整 URL。
      2. 完整性检查(如去除前导或尾随空格)不是 libcurl 的责任。
      3. 要对参数的(已清理的)部分进行 URL 编码,您可以使用 curl_easy_escape关键部分无论如何都应该在你的手中。

      【讨论】:

      • Ivan 的回答很好,但图书馆的建议肯定会帮助其他希望解决这个问题的人,就像我一样。
      猜你喜欢
      • 2015-01-21
      • 1970-01-01
      • 2016-04-14
      • 2015-04-19
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      相关资源
      最近更新 更多