Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含非可视字符的URL_Url_Unicode_Web_Special Characters_Web Crawler - Fatal编程技术网

包含非可视字符的URL

包含非可视字符的URL,url,unicode,web,special-characters,web-crawler,Url,Unicode,Web,Special Characters,Web Crawler,我的爬虫引擎似乎与特定客户的站点有问题 在该站点上,有指向URL的重定向,如下所示: http://example.com/dir/aaa$0081 aaa.php (将URL显示为非编码,其中$0081是使用十六进制表示的两个字节。) 现在,这是在检查使用WinInet Windows API调用HttpQueryInfo后返回的缓冲区时,因此这两个字节此时实际上表示一个WideChar 现在,我可以看到,例如$0081是一个非视觉控制字符: 问题是,如果我在将来对服务器的请求中使用URL“

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

在该站点上,有指向URL的重定向,如下所示:

http://example.com/dir/aaa$0081 aaa.php
(将URL显示为非编码,其中$0081是使用十六进制表示的两个字节。)

现在,这是在检查使用WinInet Windows API调用HttpQueryInfo后返回的缓冲区时,因此这两个字节此时实际上表示一个WideChar

现在,我可以看到,例如$0081是一个非视觉控制字符:

问题是,如果我在将来对服务器的请求中使用URL“原样”(URL编码),它将以400或404响应。(另一方面,它是否被完全删除,它是否工作,服务器是否提供正确的页面和响应…)

我怀疑FireFox/IE/etc在发出HTTP请求之前正在剥离URL中不可见的控件字符。。。(至少IEHTTPHeaders和FF Live HTTP Headers加载项不显示任何不可见字符。)


我想知道是否有人能为这一点指出一个标准?因为我所看到的不可见的chracter不应该在url中找到,所以我想一个解决方案可能是(在这个和未来的情况下)我删除这些chracter。但这并不是一个在网络上被广泛讨论的话题。

在给出的示例中,$0081只是五个Ascii字符。但是如果你的意思是这就是它的样子,并且你(不知何故)推断出实际的URL包含U+0081,那么应该发生的事情,并且至少在Firefox上发生的事情是,它被%编码(“URL编码”)为%C2%81(由U+0081的UTF-8编码形式的两个字节编码而成。Firefox在其地址栏中显示为空,因为U+0081是控制字符,但服务器实际上获得了%C2%81,并且必须从那里获取它

我不知道空间从何而来,但URL不能包含空间,除非为%-编码(%20)


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

我扩展了我的原始问题,以澄清某些问题。稍后我将尝试使用Ethereal来证明/反驳我的观点。(如果我正确认为FF/IE只是完全删除了不可见的控制字符。)在查看HTTP Live标头时,它根本不在那里,不管URL编码与否。(但如果你是正确的,那么服务器的行为可能会因爬虫程序/用户代理/HTTP请求标头的不同而有所不同。)感谢您的回答,我将返回我的升级Ethereal分析结果:)使用
测试我可以看到U+0081被传输。使用Firefox中的篡改数据,我可以看到请求被正确编码为GET/?q=a%C2%81bI。我将接受您的回答。感谢您的帮助:)(但是,我对这个特定网站/行为的问题的一般原因仍然不清楚。许多奇怪的事情。我尝试过的WinInet和另一个HTTP库都接收到一个针对特定百分比编码URL的301重定向,但输入FF的相同百分比编码URL,甚至复制了请求头,都没有。这让我的工作变得更加困难头部。如果我有足够的理解,我会提出一个新问题。)最后,我找到了问题的解决方案,确定了根本问题(301重定向位置标题中的非百分比编码UTF-8字符),并在这里更准确地提问: