请求正文正在更改?或翻译不正确

时间:2018-10-11 18:42:54

标签: ruby-on-rails node.js rest express rest-client

我正在从Rails应用程序向ExpressJS应用程序发送发布请求。在邮递员中它起作用,但是当我从Rails应用程序发送发布请求时,参数在Rails端看起来很好,但是当ExpressJS应用程序收到它们时,它们是不同的吗?特别是在嵌套的hash(forms_list)中。救命。数据如下:

这些是rails参数:

{:respond_url=>"http://localhost:3000/api/v1/crawls/rover_page", :error_url=>"http://localhost:3000/api/v1/crawls/rover_error", :crawl_id=>"5bbf971e0928538630743eb8", :dimension_id=>"eda510527346f84479a6", :next_page=>"", :back_button=>"", :start_url=>"https://hrlb.oregon.gov/bspa/licenseelookup/", :forms_list=>[{"select"=>{"//td[select]/select"=>"lastname"}, "text_field"=>{"//td[2]/input[1]"=>"bac"}}], :clicks_list=>["//input[@type='submit']"], :links_selector=>"//table[2]//tr[td[a]]//td[1]/a", :command_list=>["start_url", "form", "click", "record_links"]}

它们是通过RestClient发送的,就像这样:

new_crawl = RestClient.post("#{ENV['ROVER_URL']}/crawl/new_crawl", params)

这些是邮递员发送的有效参数:

{"respond_url": "http://localhost:3003/api/v1/crawls/rover_page",
"error_url": "http://localhost:3003/api/v1/crawls/rover_error",
"crawl_id": "5bbcfd36092853736bc872d7",
"dimension_id": "123",
"next_page": "",
"back_button": "",
"start_url":"https://hrlb.oregon.gov/bspa/licenseelookup/",
"forms_list":[{"text_field":{"//td[2]/input[1]": "bac"}, "select": {"//td[select]/select": "lastname"}}],
"clicks_list": ["//input[@type='submit']"],
"links_selector": "//table[2]//tr[td[a]]//td[1]/a",
"command_list": ["start_url", "form", "click", "record_links"]
}

这是ExpressJS方面的屏幕截图:

ExpressJS data interpreted - WRONG

这就是数据的外观(与邮递员数据一起发送):

ExpressJS data interpreted - Correctly

1 个答案:

答案 0 :(得分:1)

我将重点放在拥有有效的JSON字段名称上。特别是,斜线和括号将有机会在沿途的某个位置将辐条扳手插入辐条。

尽管JSON有效(以某种方式),但我相信//td[2]/input[1]并不是有史以来最大的字段名,它可能无法与所有与结果有关系的库一起使用!

Here's a brief discussion on valid/invalid characters in JSON

如果您控制JSON的结构,则最好将baclastname设置为字段名,并使用选择器作为值。