在使用代码组装URL时,一定要注意URL中的特殊字符。某些特殊字符的存在,在传输之后会切断你的URL,导致你的访问链接变得不正确。
例如下面这个,我组装之后的链接形式:

最后的time字段是有个空格的。用这个链接去请求服务,一直返回错误。很苦恼。
后来,我用浏览器打开这个链接,可以获取到正确的数据。通过比较代码中的URL字符串和浏览器中的地址:

发现,字符串URL中的空格被自动替换成了%20。我也将代码中的URL中的空格替换成%20之后,代码也执行成功了。
所以,在代码中组装URL时,一定要注意里面的特殊字符。
我写了下面这个替换特殊字符的函数,可以直接用,防止URL中的特殊字符对代码造成大坑。
VVoid UrlEncode(const std::string& url, std::string& strTmpUrlPar)
{
strTmpUrlPar= url;
strTmpUrlPar.replace(",", "%2C");
strTmpUrlPar.replace("\\", "%5C");
strTmpUrlPar.replace("\"", "%22");
strTmpUrlPar.replace(":", "%3A");
strTmpUrlPar.replace("{", "%7B");
strTmpUrlPar.replace("}", "%7D");
strTmpUrlPar.replace("[", "%5B");
strTmpUrlPar.replace("]", "%5D");
strTmpUrlPar.replace("|", "%7C");
strTmpUrlPar.replace(" ", "%20");
strTmpUrlPar.replace("+", "%20");
strTmpUrlPar.replace(";", "%3B");
strTmpUrlPar.replace("!", "%21");
strTmpUrlPar.replace("#", "%23");
strTmpUrlPar.replace("$", "%24");
strTmpUrlPar.replace("'", "%27");
strTmpUrlPar.replace("(", "%28");
strTmpUrlPar.replace(")", "%29");
strTmpUrlPar.replace("*", "%2A");
strTmpUrlPar.replace("/", "%2F");
strTmpUrlPar.replace("?", "%3F");
strTmpUrlPar.replace("@", "%40");
}

被折叠的 条评论
为什么被折叠?



