C++解析URL的方式

发布于:2024-12-18 ⋅ 阅读:(46) ⋅ 点赞:(0)

一、URL格式为http://192.168.80.166:6666/designResLib/test/test

std::vector<CString> ThkCabRMaterialStaDlg::splitAddress(const CString& address)
{
	std::vector<CString> result;

	CString remaining = address;
	result.push_back(remaining.Left(remaining.Find(':')));  // 获取协议部分

	remaining = remaining.Mid(remaining.Find(':') + 1);
	CString ip = remaining.Left(remaining.Find(':'));  // 获取完整的 IP 地址部分

	if (ip.Left(2) == _T("//")) {
		ip = ip.Mid(2); // 去掉前面的 //
		if (ip.Left(1) == _T("/")) {
			ip = ip.Mid(1); // 去掉前面的 /
		}
	}
	result.push_back(ip);

	remaining = remaining.Mid(remaining.Find(':') + 1);
	if (remaining.Find('/') != -1) {
		result.push_back(remaining.Left(remaining.Find('/')));  // 获取端口部分
	}

	remaining = remaining.Mid(remaining.Find('/') + 1);
	if (!remaining.IsEmpty()) {
		result.push_back(remaining);  // 获取路径部分
	}
}

二、URL格式为http://plm.abc.com/api/abc/customer/classification/abc

std::vector<CString> result;
// 找到第一个"/"的位置
int pos1 = address.Find("/");

// 提取第一部分
CString part1 = address.Left(pos1);
result.push_back(part1);

// 找到第一个"/"之后的部分
CString remaining = address.Mid(pos1 + 2); // 加2是为了去除“//”

// 找到第二个出现的"/"的位置
int pos2 = remaining.Find("/");

// 提取第二部分
CString part2 = remaining.Left(pos2);
result.push_back(part2);

result.push_back("80");

// 提取第三部分
CString part3 = remaining.Mid(pos2);
result.push_back(part3);

return result;