【问题标题】:Postman POST works properly; Ruby POST does not. How do I debug the difference?邮递员 POST 工作正常; Ruby POST 没有。如何调试差异?
【发布时间】:2019-10-15 10:14:26
【问题描述】:

我需要对一个 API 执行一个 POST 请求,该 API 需要一个 JSON 有效负载,其中包含一个嵌套的字符串化 JSON 对象。我执行 GET 请求来获取字符串,解析它(两次!)以获取哈希,修改一个参数,然后将其 POST 回来。当我通过邮递员发帖时,它照常进行。当我通过 Ruby Rest-Client gem 发布相同的字符串时,POST 似乎通过了,但是有效负载的字符串化方式存在问题,从而提供了不需要的结果。

不幸的是,我无法重构这个公认设计不佳的后端。我只能使用我所拥有的。

我已经尝试了该代码的十几种排列方式。进入帖子的所有内容看起来都是正确的,并且与 Postman 帖子相同。

这是 Postman HTTP 化的,没有识别信息:

POST /example/home/api/savesettings HTTP/1.1
Host: dev.noneofyourbusiness.com
Cookie: identification-gui=f4k3-gu1-5tr1n9
Content-Type: application/json

{"settings":"{\"rows\":50,\"columns\":[\"Col1\",\"Col2\",\"Col3\",\"Col4\"],\"sort\":{\"column\":\"Col1\",\"direction\":1},\"filters\":{\"Status\":[\"Active\"]},\"widths\":{\"Id\":\"170px\",\"Description\":\"192px\"}}"}

这是 Ruby 代码,目的是做同样的事情:

response = RestClient.get(
        get_url,
        :accept => :json,
        :cookies => {cookie[:name] => cookie[:value]}
    )

hash = JSON.parse(JSON.parse(response))
hash['columns'] = "Col1;Col2;Col3;Col4"
payload = {:settings => hash.to_json}.to_json

RestClient.post(
        post_url,
        payload,
        :content_type => :json,
        :cookies => {cookie[:name] => cookie[:value]}
    )

邮递员请求正确设置列。 Ruby 请求似乎清除了所有设置,让我相信 JSON 格式不正确,但我不确定。

调试时,Postman 主体/Rest-Client 负载看起来相同。

【问题讨论】:

  • 我相信 Ruby 的 hash['columns'] = "Col1;Col2;Col3;Col4" 不会像 Postman 的 \"columns\":[\"Col1\",\"Col2\",\"Col3\",\"Col4\"] 那样提供 JSON。
  • @PavelMikhailyuk ,感谢您让我再看看那部分。我错过了有效载荷没有“列”数组,因为转义的 json 让我眼花缭乱。修好了。

标签: json ruby rest rest-client


【解决方案1】:

在用头撞桌子一周后,我意识到我需要做的就是添加

.split(";")

到我的专栏的末尾。现在一切正常。

【讨论】:

  • 或者只是将它们作为Array 传递,就像您通过邮递员发送它一样,例如["Col1","Col2","Col3","Col4"] 或者更好的是%w(Col1 Col2 Col3 Col4)
  • 为简洁起见,在帖子中就是这样。它实际上是以分号分隔的字符串作为参数出现的。所以它是 columns.split(";")
  • 您应该澄清一下,因为看起来您的意思是hash['columns'] = hash['columns'].split(';'),但您写的是我将列设置为"Col1;Col2;Col3;Col4"的字符串
  • 不,你误会了。我的意思是 hash['columns'] (表示列设置)= columns.split(';') (表示提供分号分隔字符串的方法参数)
猜你喜欢
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多