邮递员POST正常工作; Ruby POST没有。如何调试差异?

时间:2019-05-29 18:38:14

标签: json ruby rest rest-client

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

不幸的是,我无法重构这个设计欠佳的后端。我只能用我现有的东西。

我尝试了此代码的十几种排列。帖子中的所有内容看起来都是正确的,并且与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有效负载看起来相同。

1 个答案:

答案 0 :(得分:1)

在将我的头靠在桌子上一周后,我意识到我要做的就是添加

.split(";")

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