你从服务器日志中提取一个URL,它看起来像这样:https://example.com/search?q=hello%20world&redirect=https%3A%2F%2Fother.com%2Fpath。你需要读取查询参数,但百分比编码使其在一瞥间几乎不可能。所以你将它粘贴到浏览器工具、解码它、读取结果、然后重新编码修改后的版本来测试某些东西。两次往返到网站做一个微不足道的操作。
URL编码是开发人员处理但很少考虑的事情之一 — 直到破坏的重定向、格式错误的查询字符串或双编码参数将五分钟的任务变成一小时的调试会话。
当URL编码造成真正的问题时
双编码是经典陷阱。URL被应用程序编码一次,然后被中间件层再次编码,将%20变为%2520。要诊断这个问题,你需要逐步解码URL并看到额外编码从何处渗入。在Terminal中使用python3 -c "import urllib.parse; print(urllib.parse.unquote('...'))"可以工作,但对长URL来说很慢并且容易出错。
编码错误也会破坏OAuth流、webhook URL和API回调,其中重定向URI必须完全匹配。能够快速编码和解码让你比较你的应用发送的内容与服务器期望的内容。
立即编码和解码URL
Bellows在其41个开发工具中包括URL编码器和解码器。粘贴编码的URL以看到可读的版本。输入普通URL以获得正确编码的输出。一次点击在编码和解码之间切换,结果实时更新。
调试重定向
OAuth和SSO流将重定向URI作为URL编码的查询参数传递。当重定向失败时,第一步是解码URL以验证目标与你注册的回调匹配。拥有本地工具意味着你可以在不离开IDE或将可能敏感的回调URL粘贴到公开网站的情况下完成此操作。
使用查询字符串
通过URL参数接受复杂过滤器或搜索查询的API通常需要仔细编码特殊字符,如&、=、+和空格。专用编码器确保你获得正确的输出,无需猜测哪些字符在特定上下文中需要转义。