💡
原文英文,约900词,阅读约需3分钟。
📝
内容提要
GraphQL是一种用于从后端获取嵌套数据的查询语言。为提高效率,推出了“持久查询”扩展,客户端仅发送查询文本的哈希值。这虽然优化了性能,但对网络爬虫造成了挑战。通过使用mitmproxy工具,可以拦截请求并修改哈希,从而提取完整查询文本,确保爬虫在网站变化时仍能正常工作。
🎯
关键要点
- GraphQL是一种用于从后端获取嵌套数据的查询语言。
- 为提高效率,推出了“持久查询”扩展,客户端仅发送查询文本的哈希值。
- 持久查询优化了性能,但对网络爬虫造成了挑战。
- GET请求更容易被阻止,且隐藏查询参数使得无法获取完整查询。
- 网站变化时,旧的哈希可能失效,无法再次使用。
- 可以通过拦截请求并修改哈希来提取完整查询文本。
- mitmproxy是一个开源工具,可以拦截并修改请求。
- 使用Python脚本修改请求的哈希值为伪造值。
- 需要使用FoxyProxy扩展将浏览器请求重定向到mitmproxy。
- 通过定期发送相同的查询和哈希,确保爬虫在网站变化时仍能正常工作。
- 持久查询虽然优化了GraphQL API的性能,但也给网络爬虫带来了显著挑战。
❓
延伸问答
什么是GraphQL的持久查询扩展?
持久查询扩展允许客户端仅发送查询文本的哈希值,从而提高性能。
持久查询对网络爬虫有什么挑战?
持久查询使得网络爬虫难以获取完整查询文本,因为它依赖于服务器存储的哈希值,这些哈希可能会失效。
如何使用mitmproxy提取GraphQL的完整查询文本?
可以通过mitmproxy拦截请求并修改哈希值为伪造值,从而获取完整查询文本。
为什么GET请求在持久查询中更容易被阻止?
GET请求通常更容易被阻止,因为它们的查询参数是公开的,且持久查询隐藏了完整查询。
如何确保爬虫在网站变化时仍能正常工作?
定期发送相同的查询和哈希,以确保服务器记住该哈希,从而保持爬虫的功能。
FoxyProxy在使用mitmproxy时有什么作用?
FoxyProxy用于将浏览器请求重定向到mitmproxy,以便拦截和修改请求。
➡️