获取请求不接受正文,但 requests.get 接受

时间:2021-05-07 10:33:55

标签: reactjs python-requests fetch

我有一个接受 GET 的请求 body api,以便根据正文中的内容进行过滤。如下图,逻辑是通过<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 请求中使用 body 并检索数据?

1 个答案:

答案 0 :(得分:0)

GET 不支持请求中的正文。就算通过了,也会被忽略。

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

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)