逆向工程GraphQL持久查询扩展

逆向工程GraphQL持久查询扩展

💡 原文英文,约900词,阅读约需3分钟。
📝

内容提要

GraphQL是一种用于从后端获取嵌套数据的查询语言。为提高效率,推出了“持久查询”扩展,客户端仅发送查询文本的哈希值。这虽然优化了性能,但对网络爬虫造成了挑战。通过使用mitmproxy工具,可以拦截请求并修改哈希,从而提取完整查询文本,确保爬虫在网站变化时仍能正常工作。

🎯

关键要点

  • GraphQL是一种用于从后端获取嵌套数据的查询语言。
  • 为提高效率,推出了“持久查询”扩展,客户端仅发送查询文本的哈希值。
  • 持久查询优化了性能,但对网络爬虫造成了挑战。
  • GET请求更容易被阻止,且隐藏查询参数使得无法获取完整查询。
  • 网站变化时,旧的哈希可能失效,无法再次使用。
  • 可以通过拦截请求并修改哈希来提取完整查询文本。
  • mitmproxy是一个开源工具,可以拦截并修改请求。
  • 使用Python脚本修改请求的哈希值为伪造值。
  • 需要使用FoxyProxy扩展将浏览器请求重定向到mitmproxy。
  • 通过定期发送相同的查询和哈希,确保爬虫在网站变化时仍能正常工作。
  • 持久查询虽然优化了GraphQL API的性能,但也给网络爬虫带来了显著挑战。