我正在尝试重现rails站点在特定爬虫访问特定页面时生成的异常:
ActionView::Template::Error:不兼容的字符编码:ASCII-8位和UTF-8
该页面接受GET参数。当我用浏览器访问带有相同GET参数的页面时,一切都能正确呈现。
crawler的IP始终是基于EU的(我的站点是基于美国的),其中一个用户代理是:
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的呈现方式?是否有其他设置可以尝试重现此设置?
发布于 2015-10-11 00:54:33
那不是浏览器,更像是自动爬虫。实际上,如果您遵循用户代理中的链接,您将得到以下解释
Grapeshot爬虫是一个自动化的机器人,它访问页面来检查和分析内容,从这个意义上说,它有点类似于主要搜索引擎公司使用的机器人。
除非爬虫正在提交POST请求(这真的不太可能,因为爬虫倾向于通过GET跟踪链接,而不是发布POST请求),这意味着爬虫以某种方式在您的页面中注入了一些信息,从而导致您的控制器崩溃。
最常见的原因是查询字符串格式错误。检查与请求相关的查询字符串:它很可能包含一个非UTF8编码的字符,该字符被控制器读取,但不知何故导致崩溃。
还有必要检查异常的堆栈跟踪(在Rails日志中或使用第三方应用程序,如Bugsnag),以确定堆栈的哪个组件导致了异常,并复制、测试和修复它。
https://stackoverflow.com/questions/33056454
复制相似问题