擷取url參數
代碼示例
/**
* C++ 擷取url參數, a=1&b=2&c=3
*
* @param url_args
* @param url_params
* @return
*/
int get_url_args(map<string, string> &url_args, string &url_params) {
if (url_params.empty()) {
return -1;
}
string key;
string val;
size_t last_pos = 0;
size_t amp_pos = 0; /* & == amp;*/
size_t equal_pos = 0;
while ((equal_pos = url_params.find('=', last_pos)) != string::npos) {
amp_pos = url_params.find('&', last_pos);
if (amp_pos == string::npos) {
amp_pos = url_params.length();
}
key = url_params.substr(last_pos, equal_pos - last_pos);
val = url_params.substr(equal_pos + 1, amp_pos - (equal_pos + 1));
url_args[key] = val;
last_pos = amp_pos + 1;
if (last_pos >= url_params.length()) {
break;
}
}
return 0;
}
測試
int main() {
map<string, string> url_args;
string url_params = "cdncode=18907E7BE0798990%2F&index=2&xxxxx=18840&yyyyy=30000&brs=760272&bre=1190603&ver=4&stdfrom=5000";
get_url_args(url_args, url_params);
//map<string, string>::iterator it = url_args.begin();
auto it = url_args.begin();
for (; it != url_args.end(); it++) {
cout << it->first << "=" << it->second << endl;
}
return 0;
}
運作結果
bre=1190603
brs=760272
cdncode=18907E7BE0798990%2F
index=2
stdfrom=5000
ver=4
xxxxx=18840
yyyyy=30000
擷取域名
/**
* C++ 擷取域名
*
* @param url
* @param domain
* @param is_http
* @return
*/
int get_domain(const string &url, string &domain, bool is_http) {
if (url.empty()) {
return -1;
}
domain = "";
const string http = "http://";
const string https = "https://";
if (url.find(http) != string::npos || url.find(https) != string::npos) {
string::size_type start_pos = is_http ? http.length() : https.length();
string::size_type end_pos = url.find("/", start_pos);
if (end_pos != string::npos) {
domain = url.substr(start_pos, end_pos - start_pos);
} else {
domain = url.substr(start_pos);
}
}
return 0;
}
測試
int main() {
string http_domain;
get_domain("http://aaa.bbb.com/1.mp4", http_domain, true);
cout << http_domain << endl;
string https_domain;
get_domain("https://111.222.333", https_domain, false);
cout << https_domain << endl;
return 0;
}
運作結果
aaa.bbb.com
111.222.333