我的爬虫引擎似乎与特定客户的网站有问题。
在该站点上,重定向到如下所示的 URL:
http://example.com/dir/aaa$0081 aaa.php
(将 URL 显示为未编码,其中 $0081 是使用 HEX 表示的两个字节。)
现在,这是在检查使用 WinInet Windows API 调用 HttpQueryInfo 后返回的缓冲区时,所以此时这两个字节实际上代表了一个 WideChar。
现在,我可以看到例如 $0081 是一个非可视控制字符: Latin-1 Supplement (Unicode block)
问题是,如果我将 URL “按原样”(URL 编码)用于未来对服务器的请求,它会以 400 或 404 响应。(另一方面,它是否被完全删除,它可以工作并且服务器提供正确的页面和响应...)
我怀疑 FireFox/IE/等。在发出 HTTP 请求之前,正在去除 URL 中的不可见控制字符...(至少 IEHTTPHeaders 和 FF Live HTTP Headers 插件不会显示任何不可见字符。)
我想知道是否有人可以为此指出一个标准?对于我所看到的不应在 URL 中找到不可见字符的内容,因此我认为解决方案可能是(在此和将来的情况下)删除这些。但这似乎不是网络上广泛讨论的话题。