新浪短地址 API 踩坑记

2017年11月4日 · 529 字 · 2 分钟 · #好玩系列

关于 & 符号的坑。

原因

因业务需要,需要统计发送的短信中关于链接部分的点击信息。由于公司的域名较长,需要转换一下长地址,因此选择了新浪短地址 API 服务

在使用的过程中,发现了一个小问题:

我定义的urlhttps://www.abcdefghi.com/event/detail/1488?app=2&uid=131,但是请求完了新浪的 API 后,我的地址发生了变化,为:https://www.abcdefghi.com/event/detail/1488?app=2。实在没有搞明白,在保证代码不错的情况下,进行了排查。

看文档

出现问题第一步找文档是我开发的必要原则。

short_url/shorten
short_url/shorten

根据文档的提示,对应的代码基本没有问题,细心的我在「请求参数」部分发现了一句话:需要转换的长链接,需要URLencoded。然后我就将URL 进行urlencode,即:

$curlUrl = urlencode('https://www.abcdefghi.com/event/detail/1488?app=2&uid=131');

得到的结果就是:

https%3A%2F%2Fwww.abcdefghi.com%2Fevent%2Fdetail%2F1488%3Fapp%3D2%26uid%3D131

然后发起请求后的结果是:

{
    "code":true,
    "msg":"请求成功!",
    "result":{
        "error":"Error: Link Forbidden!",
        "error_code":21506,
        "request":"/2/sinaurl/public/shorten.json"
    }
}

有点失望了。。但是绝不放弃。

再尝试

我发现 API 将 &后面的部分处理了,那我如果将其进行urlencode呢,也就是urlencode('&')。说做就做,试试呗。

最后请求成功且转换成功。