我正在编写一些必须从网站获取一些数据的代码。没有什么争议(我认为) - 它适用于一个孩子的体育俱乐部,它必须从国家组织的网站上获取时间。它不是专有或商业数据。
问题是返回的数据似乎是故意损坏的。我可能只是偏执狂,但我花了几个小时检查这个。我正在使用自己的代码,我正在使用实时标题Firefox扩展来找出要发送到网站的内容。我正在复制GET
标题,除了我要遗漏Accept-Encoding
,因为我不想处理gzip。我已经尝试将Connection
设置为close
和keep-alive
,但这没有任何区别。
返回的页面周围有一些额外的十六进制字符序列 - 没什么,但它足以搞砸我的解析。每次尝试时,角色及其位置都会发生变化。我最初的想法是,我正在弄乱我正在回收的缓冲区(我必须调用recv
可能20次以获得整个页面),但这似乎不是问题。页面的刮擦版本总是这样结束,例如:
</body>
7
</html>
0
实时页面始终结束</body></html>
。
知道这里发生了什么吗?此网站似乎位于Cloudflare / nginx上。这是nginx能做的吗?他们是否有可能弄乱了页面的文本版本,并在gzip压缩版本上发送了良好的数据?我不想开始解压缩数据。
答案 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
所以,与刮擦无关。