逆向工程GraphQL持久查询扩展

逆向工程GraphQL持久查询扩展

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

内容提要

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

🎯

关键要点

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

延伸问答

什么是GraphQL的持久查询扩展?

持久查询扩展允许客户端仅发送查询文本的哈希值,从而提高性能。

持久查询对网络爬虫有什么挑战?

持久查询使得网络爬虫难以获取完整查询文本,因为它依赖于服务器存储的哈希值,这些哈希可能会失效。

如何使用mitmproxy提取GraphQL的完整查询文本?

可以通过mitmproxy拦截请求并修改哈希值为伪造值,从而获取完整查询文本。

为什么GET请求在持久查询中更容易被阻止?

GET请求通常更容易被阻止,因为它们的查询参数是公开的,且持久查询隐藏了完整查询。

如何确保爬虫在网站变化时仍能正常工作?

定期发送相同的查询和哈希,以确保服务器记住该哈希,从而保持爬虫的功能。

FoxyProxy在使用mitmproxy时有什么作用?

FoxyProxy用于将浏览器请求重定向到mitmproxy,以便拦截和修改请求。

➡️

继续阅读