0
点赞
收藏
分享

微信扫一扫

【C++】获取url参数


获取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


举报

相关推荐

0 条评论