首页 > 解决方案 > Django Rest Framework - 我有使用 curl 命令的 API,如何更改它以使用浏览器中的标准 http 请求?

问题描述

我想我可能误会了什么。我创建了 Django Rest Framework 应用程序。我有使用令牌、query_params 等的 api。

如果我像这样卷曲,一切都会正常工作:

curl -X "GET" http://localhost:8000/api/results 
-H "Content-Type: application/json" 
-H "Authorization: Token eeea084811d9213aa3803946e4464758d66966bc" 
--data 'make=test'

它实际上是在返回正确的记录。但通常,在其他网站上,我看到他们正在以这种格式为用户实现他们的 api:

http://www.example.com/?apikey=[yourkey]&

我试图查找将 curl 转换为 http 但我没有发现任何对我有用的东西,现在我很困惑。也许我的 api 目前仅适用于 curl?也许这个“http调用”需要另外实现/编码?

我怀疑这个问题很愚蠢,但不幸的是我还不知道合适的关键字来谷歌搜索它。

标签: djangocurldjango-rest-framework

解决方案


我认为您对 curl 和 HTTP 请求的实际含义有些误​​解。

curl 和 Web 浏览器都以相同的方式进行 HTTP 请求调用。例如,当您http://www.example.com/?apikey=123在浏览器中键入内容时,浏览器实际上会向http://www.example.com/?apikey=123. 与此等效的 curl 将是:curl -X "GET" http://www.example.com/?apikey=123发送相同的 HTTP GET 请求。

现在已经清楚了,让我们看看您提供的两种格式之间的区别。

对于初学者,您需要对 HTTP 请求的实际含义有一个基本的了解。发送到 API 端点的典型 HTTP 请求包括以下内容:

  • 方法 - GET、POST、PATCH、...
  • 网址 -http://www.example.com/
  • 查询参数(实际上是 URL 的一部分) -apikey=123或者ordering=created_at例如
  • 标题 -Content-Type: application/jsonAuthorization: apikey 123例如
  • 正文 - 任何类型的数据(可以是 json、原始文本、二进制等格式)

现在,您提供的两种格式的唯一区别是授权值(令牌、apikey)的位置。在您的第一种格式中,它作为Authorization键值放置在 HTTP 请求的标头部分中。在您的第二种格式中,它被放置在 HTTP 请求的查询参数部分中,作为apikey.

希望这能澄清一点。


推荐阅读