gpt4 book ai didi

python - 如何检测 GET 请求是否来自浏览器

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:13 25 4
gpt4 key购买 nike

我正在寻找一种方法,如果用户从浏览器调用,则向他们显示 html,或者如果调用是从应用程序、带有curl 的终端或通常任何其他方式进行的,则仅向他们提供 JSON 中的 API 响应。

我知道许多 API 都可以执行此操作,并且我相信 Django 的 REST 框架也可以执行此操作。

我已经能够通过将浏览器的用户代理传递给curl来欺骗其中的一些API,所以我知道这是使用用户代理完成的,但是我如何实现这一点呢?涵盖所有可能的或大多数用户代理。

必须有一个文件/数据库或正则表达式,这样我就不必担心每隔几个月更新一次用户代理列表,也不必担心使用最新浏览器的用户可能无法访问我的网站.

最佳答案

我知道这篇文章已经有几年了,但自从我偶然发现它......

tldr; 除非绝对必要,否则不要使用用户代理来确定返回格式。使用 Accept header 或(不太理想)使用单独的端点/URL。

为特定端点设置所需返回格式的标准且最面向 future 的方法是使用 Accept header 。 Accept 明确设计为允许客户端声明他们希望返回的响应格式。该值将是标准 MIME 类型。

默认情况下,Web 浏览器将发送 text/html 作为 Accept header 的值。大多数 Javascript 库和前端框架都会发送 application/json,但如果需要,通常可以显式设置为其他内容(例如 text/xml)。据我所知,所有移动应用框架和 HTTP 客户端库都可以根据需要设置此 header 。

尝试使用用户代理来简单地确定响应格式有两个大问题:

  1. 这个列表将会非常庞大​​。您需要考虑到今天需要支持的每个可能的客户。如果此端点在内部使用,这可能不会立即出现问题,因为您可能能够强制您接受哪些用户代理(可能会导致其自身的一系列问题) future ,例如强制用户无限期地使用特定版本的 Internet Explorer),这将有助于保持此列表较小。如果要将此端点公开到外部,您几乎肯定会错过一些您迫切需要接受的东西。
  2. 列表将会改变。您需要考虑到明天、下周、明年和五年后需要支持的每一个可能的客户。这成为一个 self 引发的维护难题。

关于接受的两个注意事项:

  1. 在尝试实现之前,请先阅读如何使用 Accept header 。这是该网站的实际示例: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,应用程序/签名交换;v=b3;q=0.9。鉴于此,我将返回 HTML。
  2. header 的值可以是*/*,基本上只是表示“无论”或“我不在乎”。此时,服务器可以确定响应格式。

关于python - 如何检测 GET 请求是否来自浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46099439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com