ho cambiato un pò il codice:
// mylib.h
codice:
struct reqline
{
public:
const std::string method;
const std::string uri;
const std::string vprot;
reqline();
reqline(std::string const & line);
private:
std::string getMethodFrom(const std::string & line) const;
std::string getUriFrom(const std::string & line) const;
std::string getVprotFrom(const std::string & line) const;
};
// mylib.cpp
codice:
reqline::reqline() : method(""), uri(""), vprot("") {}
reqline::reqline(const std::string & line) :
method(getMethodFrom(line)),uri(getUriFrom(line)),vprot(getVprotFrom(line)) {}
std::string reqline::getMethodFrom(const std::string & line) const
{
const std::string delim(" ");
std::string::size_type first = 0;
std::string::size_type last = line.find_first_of(delim, first);
return line.substr(first, last);
}
std::string reqline::getUriFrom(const std::string & line) const
{
const std::string delim(" ");
std::string::size_type first = 0;
std::string::size_type last = line.find_first_of(delim, first);
first = last + 1;
last = line.find_first_of(delim, first);
return line.substr(first, last);
}
std::string reqline::getVprotFrom(const std::string & line) const
{
const std::string delim(" ");
std::string::size_type first = 0;
std::string::size_type last = line.find_first_of(delim, first);
first = last + 2;
last = line.find_first_of(delim, first);
return line.substr(first, last);
}
nel main faccio:
codice:
//using namespace std;
line = "GET /wiki/Pagina_principale HTTP/1.1";
mylib::reqline rq(line);
cout << endl << endl;
cout << "method: " << rq.method << endl;
cout << "uri: " << rq.uri << endl;
cout << "vport: " << rq.vprot << endl;
soltanto che method viene splittao bene: GET
ma uri e vport ritornano la stessa riga // wiki/Pagina_principale HTT
lo split avviene quà:
codice:
const std::string delim(" ");
std::string::size_type first = 0;
std::string::size_type last = line.find_first_of(delim, first);
first = last + 1;
last = line.find_first_of(delim, first);
return line.substr(first, last);