Wie man optionale Query-Parameter mit Boost::URL parst
In unserem vorherigen Beispiel Wie man Query-Parameter mit Boost::URL dekodiert (minimales Beispiel) haben wir gezeigt, wie man Query-Parameter aus einer URL dekodiert.
Jedoch wird dieses minimale Beispiel abstürzen:
bad_alloc_error.txt
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_allocwenn die Query-Parameter fehlen. Dies liegt daran, dass *params.find_last("username") einen nullptr dereferenziert, wenn der Parameter fehlt.
In diesem Beispiel zeigen wir, wie man überprüft, ob der Parameter vorhanden ist, bevor auf ihn zugegriffen wird.
parse_query.cpp
#include <iostream>
#include <boost/url.hpp>
using namespace boost::urls;
using std::cout, std::endl;
int main() {
// Beispiel für eine kodierte URL mit Query-Parametern
std::string encoded_url_str = "https://example.com/api/login?password=mypassword";
// URL parsen
url_view parsed_url(encoded_url_str);
// Query-Parameter abrufen und dekodieren
auto params = parsed_url.params();
if(params.find_last("username") == params.end()) {
cout << "No username parameter found" << endl;
} else {
std::string username = (*params.find_last("username")).value;
cout << "Decoded username: " << username << endl;
}
if(params.find_last("password") == params.end()) {
cout << "No password parameter found" << endl;
} else {
std::string password = (*params.find_last("password")).value;
cout << "Decoded password: " << password << endl;
}
return 0;
}Wie man kompiliert
build_parse_query.sh
g++ -std=c++17 parse_query.cpp -o parse_query -lboost_urlAusführen mit
run_parse_query.sh
./parse_queryBeispiel-Ausgabe
output.txt
No username parameter found
Decoded password: mypasswordWenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen