Postman POST 工作正常; Ruby POST 没有。如何调试差异?
Postman POST works properly; Ruby POST does not. How do I debug the difference?
我需要对 API 执行 POST 请求,该请求采用包含嵌套字符串化 JSON 对象的 JSON 负载。我发出 GET 请求以获取字符串,解析它(两次!)以获取哈希值,修改一个参数,然后 POST 返回。当我通过 Postman post 时,一切正常。当我通过 Ruby Rest-Client gem post 相同的字符串时,似乎 POST 通过了,但是有效负载的字符串化方式存在问题,提供不想要的结果。
不幸的是,我无法重构这个公认的设计不佳的后端。我只能用我所拥有的。
我已经尝试了十几种此代码的排列组合。进入 post 的所有内容看起来都是正确的,并且与 Postman 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]}
)
Postman 请求正确设置了列。 Ruby 请求似乎擦除所有设置,让我相信 JSON 格式不正确,但我不确定。
调试时,Postman body/Rest-Client 负载看起来完全相同。
将头撞在桌子上一个星期后,我意识到我需要做的就是添加
.split(";")
到我专栏的结尾。现在一切正常。
我需要对 API 执行 POST 请求,该请求采用包含嵌套字符串化 JSON 对象的 JSON 负载。我发出 GET 请求以获取字符串,解析它(两次!)以获取哈希值,修改一个参数,然后 POST 返回。当我通过 Postman post 时,一切正常。当我通过 Ruby Rest-Client gem post 相同的字符串时,似乎 POST 通过了,但是有效负载的字符串化方式存在问题,提供不想要的结果。
不幸的是,我无法重构这个公认的设计不佳的后端。我只能用我所拥有的。
我已经尝试了十几种此代码的排列组合。进入 post 的所有内容看起来都是正确的,并且与 Postman 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]}
)
Postman 请求正确设置了列。 Ruby 请求似乎擦除所有设置,让我相信 JSON 格式不正确,但我不确定。
调试时,Postman body/Rest-Client 负载看起来完全相同。
将头撞在桌子上一个星期后,我意识到我需要做的就是添加
.split(";")
到我专栏的结尾。现在一切正常。