我试图重现我的rails网站在特定抓取工具访问特定网页时生成的异常:
ActionView :: Template ::错误:不兼容的字符编码:ASCII-8BIT和UTF-8
该页面采用GET参数。当我使用浏览器访问具有相同GET参数的页面时,一切都正确呈现。
抓取工具的IP始终是基于欧盟的(我的网站是基于美国的),其中一个用户代理是:
Mozilla / 5.0(兼容; GrapeshotCrawler / 2.0; + http://www.grapeshot.co.uk/crawler.php)
查看发送的HTTP标头,我在浏览器请求和爬虫之间看到的唯一区别是它包含HTTP_ACCEPT_CHARSET,而我的不包括:
- HTTP_ACCEPT_CHARSET:utf-8,iso-8859-1; q = 0.7,*; q = 0.6
我尝试在我的请求中设置此项,但我无法重现。是否有HTTP标头参数可以改变rails渲染的方式?有没有其他设置我可以尝试重现这个?
答案 0 :(得分:0)
这不是浏览器,更可能是自动抓取工具。实际上,如果您按照用户代理中的链接进行操作,则会得到以下解释
Grapeshot抓取工具是一个自动化的机器人,可以访问网页来检查和分析内容,从这个意义上说,它与主要搜索引擎公司使用的机器人有些相似。
除非抓取工具提交POST请求(这实际上不太可能因为抓取工具倾向于通过GET跟踪链接而不发出POST请求),这意味着抓取工具会以某种方式在页面中注入一些导致控制器崩溃的信息
最常见的原因是格式错误的查询字符串。检查与请求关联的查询字符串:它可能包含一个由控制器读取的非UTF8编码字符,并以某种方式使其崩溃。
检查异常的堆栈跟踪(在Rails日志中或使用第三方应用程序,如Bugsnag)来确定堆栈的哪个组件导致异常,重现,测试和修复也是值得的它。