关于nginx的刮痧对策?

时间:2013-09-24 11:00:28

标签: http nginx web-scraping screen-scraping

我正在编写一些必须从网站获取一些数据的代码。没有什么争议(我认为) - 它适用于一个孩子的体育俱乐部,它必须从国家组织的网站上获取时间。它不是专有或商业数据。

问题是返回的数据似乎是故意损坏的。我可能只是偏执狂,但我花了几个小时检查这个。我正在使用自己的代码,我正在使用实时标题Firefox扩展来找出要发送到网站的内容。我正在复制GET标题,除了我要遗漏Accept-Encoding,因为我不想处理gzip。我已经尝试将Connection设置为closekeep-alive,但这没有任何区别。

返回的页面周围有一些额外的十六进制字符序列 - 没什么,但它足以搞砸我的解析。每次尝试时,角色及其位置都会发生变化。我最初的想法是,我正在弄乱我正在回收的缓冲区(我必须调用recv可能20次以获得整个页面),但这似乎不是问题。页面的刮擦版本总是这样结束,例如:

</body>

7
</html>
0

实时页面始终结束</body></html>

知道这里发生了什么吗?此网站似乎位于Cloudflare / nginx上。这是nginx能做的吗?他们是否有可能弄乱了页面的文本版本,并在gzip压缩版本上发送了良好的数据?我不想开始解压缩数据。

1 个答案:

答案 0 :(得分:0)

我认为nginx中存在HTTP1.1处理的错误。实际上,HTTP1.0的任何标头集都会返回正确的数据。这有效:

GET /foo/bar/etc HTTP/1.0
Host: baz.org
Connection: close

但是这会将虚假数据插入到返回的文档中:

GET /foo/bar/etc HTTP/1.1
Host: baz.org
Connection: close

所以,与刮擦无关。