0

我正在编写一些必须从网站获取一些数据的代码。没有什么争议(我认为)——这是针对儿童体育俱乐部的,它必须从国家组织的网站上获取他们的时间。它不是专有或商业数据。

问题是返回的数据似乎是故意损坏的。我可能只是偏执,但我已经花了几个小时检查这个。我正在使用自己的代码,并且正在使用实时标题 Firefox 扩展来找出要发送到站点的内容。我正在GET完全复制标题,除了我要省略之外Accept-Encoding,因为我不想处理 gzip。我已经尝试Connection将两者都设置为closeand keep-alive,但这没有区别。

返回的页面周围散布着一些额外的十六进制字符序列 - 没什么,但足以搞乱我的解析。每次我尝试这个时,角色和他们的位置都会改变。我最初的想法是,我将返回的缓冲区的拼接弄乱了(我可能需要调用recv20 次才能获取整个页面),但这似乎不是问题。页面的抓取版本总是这样结束,例如:

</body>

7
</html>
0

实时页面总是结束的地方</body></html>

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

4

1 回答 1

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

因此,与刮擦无关。

于 2013-09-25T09:05:35.683 回答