【问题标题】:How do I retrieve the response cookies through curlpp?如何通过 curlpp 检索响应 cookie?
【发布时间】:2010-12-05 01:38:22
【问题描述】:

如何从 curlpp 请求中检索响应 cookie?

我想从 HTTP GET 请求中存储 PHP 会话。这是我当前的代码:

void Grooveshark::Connection::processPHPCookie()
{
    std::ostringstream buffer;

    gsDebug("Processing PHP cookie...");

    try {
        request.setOpt<cURLpp::Options::Url>("http://listen.grooveshark.com");
        request.setOpt<cURLpp::Options::WriteStream>(&buffer);
        request.perform();

        // Get the PHP Session cookie here..

    } catch (cURLpp::LogicError& exception) {
        gsError(exception.what());
    } catch (cURLpp::RuntimeError& exception) {
        gsError(exception.what());
    }

    gsDebug("Processing complete...");
}

request 是一个 cURLpp::Easy 实例。如果您需要更多详细信息,可以找到我的源代码here

提前致谢。

【问题讨论】:

    标签: c++ curlpp


    【解决方案1】:

    首先,设置exEasy.setOpt(curlpp::options::CookieFile("") 然后拨打exEasy.perform(), 然后循环

    std::list<std::string> cookies;
    curlpp::infos::CookieList::get(exEasy, cookies);
    

    【讨论】:

      【解决方案2】:

      https://bitbucket.org/moriarty/curlpp/src/ac658073c87a/examples/example07.cpp

      那个例子似乎有你想要的。特别是这段代码:

      std::cout << "\nCookies from cookie engine:" << std::endl;
      std::list<std::string> cookies;
      curlpp::infos::CookieList::get(exEasy, cookies);
      int i = 1;
      for (std::list<std::string>::const_iterator it = cookies.begin(); it != cookies.end(); ++it, i++)
      {
          std::cout << "[" << i << "]: " << MakeCookie(*it) << std::endl;
      }
      

      请注意,MakeCookie 在示例中返回一个名为 MyCookie 的结构,因此您还需要:

      struct MyCookie
      {
              std::string name;
              std::string value;
              std::string domain;
              std::string path;
              time_t expires;
              bool tail;
              bool secure;
      };
      
      MyCookie
      MakeCookie(const std::string &str_cookie)
      {
              std::vector<std::string> vC = splitCookieStr(str_cookie);
              MyCookie cook;
      
              cook.domain = vC[0];
              cook.tail = vC[1] == "TRUE";
              cook.path = vC[2];
              cook.secure = vC[3] == "TRUE";
              cook.expires = StrToInt(vC[4]);
              cook.name = vC[5];
              cook.value = vC[6];
      
              return cook;
      }
      

      【讨论】:

      【解决方案3】:

      之前的答案链接现在位于:https://github.com/datacratic/curlpp/blob/master/examples/example07.cpp

      需要注意的是,如果只想获取 cookie 响应,则必须将一个空字符串传递给 cookie 列表。

      对于前面的示例,需要添加 exEasy.setOpt(new curlpp::options::CookieList("")) 以获取 cookie 字符串(可能会使用空字符串以外的字符串,但我无法找到更多文档)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-13
        • 2015-11-02
        • 2011-09-18
        • 2019-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多