首页 > 解决方案 > 获取请求不接受正文,但 requests.get 接受

问题描述

我有一个GET接受 a 的请求 api,body以便根据正文中的内容进行过滤。如下所示,逻辑是使用<cluster_id>. Django用于后端。我正在将它与React.

import requests

url = "http://localhost:8000/v1/tasks"

payload={'cluster': <cluster_id>}
headers = {
  'Authorization': 'Token <user_token>'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

我正在尝试在前端使用 fetch 进行相同的操作,尽管我清楚地知道不建议在 GET 请求中使用正文。

async componentDidMount() {
    const options = {
      method: 'GET',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json;charset=UTF-8',
        'Authorization': 'Token ' + localStorage.getItem('token')
      },
      body: JSON.stringify({
        cluster: this.state.cluster_id
    })
    }
    const response = await fetch(`http://localhost:8000/v1/tasks`, options)
    const json = await response.json()
    return json
  }

我收到一个错误,限制在 GET 请求中使用正文。如何在不修改其余 api 结构的情况下应用 fetch 中的逻辑?是否有可能在 fetch GET 请求中使用主体并检索数据?

标签: reactjspython-requestsfetch

解决方案


GET 不支持请求中的正文。即使你通过了,它也会被忽略。

您可以使用URLSearchParams将参数转换为要与 url 一起发送的查询参数。

new URLSearchParams(params).toString()

const params = { cluster: this.state.cluster_id };
const options = {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json;charset=UTF-8',
    'Authorization': 'Token ' + localStorage.getItem('token')
  }
};
const url = `http://localhost:8000/v1/tasks?${new URLSearchParams(params)}`
const response = await fetch(url, options)

推荐阅读