400 Frappe.cloud API的不良要求

发布于 2025-02-08 05:41:51 字数 1852 浏览 2 评论 0原文

我会收到Frappe.Cloud API的400个不良请求,当我尝试使用http.newrequest使用Golang代码调用它时,当我使用Postman检查它时,此API正常工作。以下是API,

https://xxxx.frappe.cloud/api/resource/Item?fields=["name","item_name","item_group","description"]&filters=[["Item","item_group","=","xxx Product"]]

如果我使用相同的Golang代码调用与Out过滤器的同一API,则可以正常工作。以下是工作API

https://xxxx.frappe.cloud/api/resource/Item?fields=["name","item_name","item_group","description"]

代码如下

func FetchProperties(dataChannel models.DataChannel) (map[string]interface{}, error) {
thisMap := make(map[string][]map[string]interface{})
client := &http.Client{}
req, err := http.NewRequest("GET", dataChannel.APIPath, nil)
if err != nil {
    commons.ErrorLogger.Println(err.Error())
    return nil, err
}
eds, err := GetDecryptedEDSByEDSID(dataChannel.EDSId)
if err != nil {
    commons.ErrorLogger.Println(err.Error())
    return nil, &commons.RequestError{StatusCode: 400, Err: err}
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", eds.DataSource.Auth.Token)
response, err := client.Do(req)
if err != nil {
    commons.ErrorLogger.Println(err.Error())
    return nil, err
}
data, err := ioutil.ReadAll(response.Body)
if err != nil {
    commons.ErrorLogger.Println(err.Error())
    return nil, &commons.RequestError{StatusCode: 400, Err: err}
}
if response.StatusCode == 200 {
    err = json.Unmarshal(data, &thisMap)
    if err != nil {
        commons.ErrorLogger.Println(err.Error())
        return nil, &commons.RequestError{StatusCode: 400, Err: err}
    }
    return thisMap["data"][0], err
} else {
    return nil, &commons.RequestError{StatusCode: response.StatusCode, Err: errors.New("getting " + strconv.Itoa(response.StatusCode) + " From Data channel API")}
}

I'm getting 400 Bad Request for frappe.cloud API, when I'm trying to call it using golang code using http.NewRequest, this API is working fine when I check it using postman. following is the API

https://xxxx.frappe.cloud/api/resource/Item?fields=["name","item_name","item_group","description"]&filters=[["Item","item_group","=","xxx Product"]]

If I use the same golang code to call same API with out filters it works fine. following is the working API

https://xxxx.frappe.cloud/api/resource/Item?fields=["name","item_name","item_group","description"]

code as follows

func FetchProperties(dataChannel models.DataChannel) (map[string]interface{}, error) {
thisMap := make(map[string][]map[string]interface{})
client := &http.Client{}
req, err := http.NewRequest("GET", dataChannel.APIPath, nil)
if err != nil {
    commons.ErrorLogger.Println(err.Error())
    return nil, err
}
eds, err := GetDecryptedEDSByEDSID(dataChannel.EDSId)
if err != nil {
    commons.ErrorLogger.Println(err.Error())
    return nil, &commons.RequestError{StatusCode: 400, Err: err}
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", eds.DataSource.Auth.Token)
response, err := client.Do(req)
if err != nil {
    commons.ErrorLogger.Println(err.Error())
    return nil, err
}
data, err := ioutil.ReadAll(response.Body)
if err != nil {
    commons.ErrorLogger.Println(err.Error())
    return nil, &commons.RequestError{StatusCode: 400, Err: err}
}
if response.StatusCode == 200 {
    err = json.Unmarshal(data, &thisMap)
    if err != nil {
        commons.ErrorLogger.Println(err.Error())
        return nil, &commons.RequestError{StatusCode: 400, Err: err}
    }
    return thisMap["data"][0], err
} else {
    return nil, &commons.RequestError{StatusCode: response.StatusCode, Err: errors.New("getting " + strconv.Itoa(response.StatusCode) + " From Data channel API")}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寻找我们的幸福 2025-02-15 05:41:51

Postman可以选择将请求转换为等效编程语言。

这是用于发送请求的工作GO代码。包装主

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://xxx.frappe.cloud/api/resource/Item?fields=%5B%22name%22,%22item_name%22,%22item_group%22,%22description%22%5D&filters=%5B%5B%22Item%22,%22item_group%22,%22=%22,%22xxx%20Product%22%5D%5D%0A"
  method := "GET"

  payload := strings.NewReader(`{
    "payload": {},
    "url_key": "",
    "req_type": ""
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Cookie", "full_name=foo; sid=secret_sid; system_user=yes; user_id=foobar; user_image=")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}

Postman has an option to convert request to programming language equivalent.

Here is a working go code for sending the request. package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://xxx.frappe.cloud/api/resource/Item?fields=%5B%22name%22,%22item_name%22,%22item_group%22,%22description%22%5D&filters=%5B%5B%22Item%22,%22item_group%22,%22=%22,%22xxx%20Product%22%5D%5D%0A"
  method := "GET"

  payload := strings.NewReader(`{
    "payload": {},
    "url_key": "",
    "req_type": ""
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Cookie", "full_name=foo; sid=secret_sid; system_user=yes; user_id=foobar; user_image=")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文