用于C ++ / Poco

时间:2016-05-04 04:43:47

标签: c++ http networking poco

我开始使用Poco C ++库,尤其是HTTP客户端/服务器解析。我看到有HTTPRequest,HTTPResponse等类,这些类有一个名为“read(std :: istream)”的方法。此方法接受类型为“std :: istream”的输入参数。但是,我希望将其用于从命令行输入的内容。我使用cin来获取输入,但这会产生错误,因为istream和cin是不同类型的。下面是一个例子:

int main() {
  HTTPRequest* req = new HTTPRequest();
  std::string input;
  std::cout << "Enter something.. " << std::endl;
  std::cin >> input;
  req->read(input);

}

我的理解是read方法会将数据解释为HTTPRequest类型。我这样做只是为了测试。我知道“字符串”类型不会工作,但我尝试使用istream构造函数与getline等,它仍然给出编译时错误。那么这样做的理想方法是什么?

1 个答案:

答案 0 :(得分:1)

根据POCO的docsHTTPRequest :: read方法采用std::istream个对象。

void read(
    std::istream & istr
);

如果要从标准输入读取请求,请将std :: cin作为参数传递。

int main() {
  HTTPRequest* req = new HTTPRequest();
  // std::string input;
  // std::cout << "Enter something.. " << std::endl;
  // std::cin >> input;
  req->read(std::cin);

  return 0;
}

当它试图从std::cin读取时,它会提示您输入,因此您可以输入您尝试输入的内容到您在那里的字符串中。我建议您使用std::ifstream对象或使用std::istringstream。这两个都是std::istream的子类,因此您可以将其作为参数传递。

例如:

int main() {
  HTTPRequest* req = new HTTPRequest();
  std::string input;
  std::cout << "Enter something.. " << std::endl;
  std::cin >> input;
  std::istringstream iss(input);

  req->read(iss);

  return 0;
}