【问题标题】:API calling doesn't response in JSON and instead responses in some nonsense DataAPI调用不响应JSON,而是响应一些无意义的数据
【发布时间】:2020-11-13 03:33:15
【问题描述】:

我正在尝试在 Go 中调用 API,如下所示,我声明了我的方法和其他内容,以便获得所需的响应,但我面临的问题是我不知道我是否有问题在我的请求或它返回的响应中有问题。

这也是我使用的传递数据和调用API的函数

func APICall(url string,method string,request string) []byte{
  payload := strings.NewReader(request)
  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)
  if err != nil {
    fmt.Println(err)
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Access", "application/json")
  res, err := client.Do(req)
  defer res.Body.Close()
  body, err := ioutil.ReadAll(res.Body)
  return body
}
func Search(c *gin.Context) {
  url := "https://testapi-v3.iati.ir/Tools/Ping/*************"
  method := "POST"
  payload := "{\"Echo\":\"asd\"}"
  resAsByte := APICall(url,method,payload)
  fmt.Println(resAsByte)
  var v map[string]interface{}
  err := json.Unmarshal(resAsByte,&v)
  fmt.Println(err)
}

顺便说一句

err := json.Unmarshal(resAsByte,&v)

不起作用,这是我得到的二进制响应

[171 86 114 77 206 200 87 178 82 74 44 78 81 210 81 242 12 112 76 73 41 74 45 46 6 138 152 152 233 25 153 152 234 25 155 235 25 26 27 43 213 2 0]

【问题讨论】:

  • 那不是“废话数据”;那就是你打印一个字节片作为他们的代码点。您可以通过执行类似fmt.Printf("%s", b) 的操作来打印其字符串表示形式。无论如何,你应该提供一个minimal, reproducible example
  • 不幸的是,我应该给你一个令牌,出于安全原因,我不能这样做,但感谢你的回答

标签: api go binary


【解决方案1】:

您的APICall 返回[]byte。所以在这里你可以看到[]byte 的表示。 您可以将[]byte 转换为string

var s = string(body)

然后打印s 并查看一个字符串。

【讨论】:

  • 当我尝试这个方法时,它会返回 �VrM��W�RJ,NQ�Q� pLI)J-.��������
  • 这是一个 API 响应。请检查一下。可能它需要一些特定的数据。可能是它使用了一些特定的编码。尝试转储所有返回的标头。
  • 我在邮递员中测试过,它工作正常,我的输入数据是JSON,我的方法是POST,它工作得很好,但是即使我从邮递员生成goLang本机代码,结果它顺便说一句,我把你贴在那里,JSON.marshal 也不起作用,谢谢。
  • 不,我写的是测试,没关系
猜你喜欢
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2018-12-17
  • 2020-01-20
  • 1970-01-01
相关资源
最近更新 更多