如何使用 Boost::URL 解析可选查询参数
在我们之前的示例如何使用 Boost::URL 解码查询参数(最小示例)中,我们展示了如何从 URL 解码查询参数。
然而,那个最小示例会崩溃:
bad_alloc_error.txt
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc如果查询参数缺失。这是因为如果参数缺失,*params.find_last("username") 将解引用 nullptr。
在此示例中,我们展示如何在访问参数之前检查它是否存在。
parse_query.cpp
#include <iostream>
#include <boost/url.hpp>
using namespace boost::urls;
using std::cout, std::endl;
int main() {
// Example encoded URL with query parameters
std::string encoded_url_str = "https://example.com/api/login?password=mypassword";
// Parse the URL
url_view parsed_url(encoded_url_str);
// Access and decode query parameters
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;
}如何编译
build_parse_query.sh
g++ -std=c++17 parse_query.cpp -o parse_query -lboost_url使用以下命令运行
run_parse_query.sh
./parse_query示例输出
output.txt
No username parameter found
Decoded password: mypasswordIf this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow