Comment analyser les paramètres de requête optionnels en utilisant Boost::URL

Dans notre exemple précédent Comment décoder les paramètres de requête en utilisant Boost::URL (exemple minimal) nous avons montré comment décoder les paramètres de requête depuis une URL.

Cependant, cet exemple minimal plantera :

bad_alloc_error.txt
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

si les paramètres de requête sont manquants. Ceci est dû au fait que *params.find_last("username") déréférencera un nullptr si le paramètre est manquant.

Dans cet exemple, nous montrons comment vérifier si le paramètre est présent avant d’y accéder.

parse_query.cpp
#include <iostream>
#include <boost/url.hpp>

using namespace boost::urls;

using std::cout, std::endl;

int main() {
    // Exemple d'URL encodée avec des paramètres de requête
    std::string encoded_url_str = "https://example.com/api/login?password=mypassword";

    // Analyser l'URL
    url_view parsed_url(encoded_url_str);

    // Accéder aux paramètres de requête et les décoder
    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;
}

Comment compiler

build_parse_query.sh
g++ -std=c++17 parse_query.cpp -o parse_query -lboost_url

Exécuter en utilisant

run_parse_query.sh
./parse_query

Exemple de sortie

output.txt
No username parameter found
Decoded password: mypassword

Check out similar posts by category: Boost, C/C++