gpt4 book ai didi

包含非可视字符的 URL

转载 作者:行者123 更新时间:2023-12-04 05:32:02 24 4
gpt4 key购买 nike

我的爬虫引擎似乎对特定客户的站点有问题。

在该站点上,重定向到如下所示的 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 中找到,所以我认为一个解决方案可能是(在这个和 future 的情况下)我删除这些。但这并不是网络上广泛讨论的话题。

最佳答案

在给出的示例中,$0081 只是五个 Ascii 字符。但是,如果您的意思是这只是它的外观并且您(以某种方式)推断实际 URL 包含 U+0081,那么应该发生的情况,并且至少在 Firefox 上确实发生,是它是 % 编码的(“URL 编码”)为 %C2%81(由 U+0081 的 UTF-8 编码形式的两个字节进行 % 编码形成。Firefox 在其地址栏中显示为空,因为 U+0081 是控制字符,但是服务器实际上获取 %C2%81 并且必须从那里获取它。

我不知道空格来自哪里,但 URL 不能包含空格,除非是 %-encoded (%20)。

相关标准是互联网标准STD 66 , URI 通用语法。 (目前是 RFC 3986。注意:人们在这个问题中仍然经常将旧的 RFC 称为“标准”。)

关于包含非可视字符的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com