Ruby on rails 执行HTTP请求时出错

Ruby on rails 执行HTTP请求时出错,ruby-on-rails,ruby,ruby-on-rails-3,http,typhoeus,Ruby On Rails,Ruby,Ruby On Rails 3,Http,Typhoeus,我正在使用Typhous gem在rails应用程序中执行HTTP请求。请求如下 data = {"auth_token"=>"abcd" ,"employee" => {"method" => "add_employee"}} header = { "Content-Type" => "application/json","Accept"=>"application/json"} request = Typhoeus::Request.post("www.

我正在使用Typhous gem在rails应用程序中执行HTTP请求。请求如下

 data = {"auth_token"=>"abcd" ,"employee" => {"method" => "add_employee"}}
 header =  { "Content-Type" => "application/json","Accept"=>"application/json"}
 request = Typhoeus::Request.post("www.example.com",:body=> data.to_json,:headers => header)

在此执行此操作时,身份验证令牌已转换为身份验证%5Ftoken=abcd。实际上,我的API需要参数auth_令牌。因为这个API不允许访问它。这是一个未经授权的错误。请帮我解决这个问题。提前感谢。

下面是一个使用RestClient的示例,显示了数据的正确提交,我希望Typhous不会有所不同:

 data = {"auth_token"=>"abcd" ,"employee" => {"method" => "add_employee"}}
 header =  { "Content-Type" => "application/json","Accept"=>"application/json"}
 RestClient.post("www.example.com", data.to_json, header){ |response, request, result| 
       puts "PAYLOAD:"+request.args[:payload]
 }  
这是预期的有效载荷:

 PAYLOAD: "{\"auth_token\":\"abcd\",\"employee\":{\"method\":\"add_employee\"}}"
使用Typhous:

 data = {"auth_token"=>"abcd" ,"employee" => {"method" => "add_employee"}}
 header =  { "Content-Type" => "application/json","Accept"=>"application/json"}
 request = Typhoeus::Request.post("www.example.com",:body=> data.to_json,:headers => header)
 request.request.original_options[:body]
正如预期的那样,这是请求的有效负载。所以你的代码很好

 "{\"auth_token\":\"abcd\",\"employee\":{\"method\":\"add_employee\"}}"

我用to_查询更正了这个问题。实际上to_query正在将实际数据解析为API

我认为您的代码有一个输入错误'www.example.com:body=>data.to_json'应该是www.example.com,:body=>data.to_json。否则对我来说它看起来很好{auth_token=>abcd,employee=>{method=>add_employee}}。到_,json将定义创建{\auth_token\:\abcd\,\employee\:{\method\:\add_employee\}而不是auth%5Ftoken=abcd。一定还有别的东西坏了。请尝试在控制台中运行它或创建一个测试。@StanWiechers逗号输入错误。我试过了。它在执行请求时进行编码。它将auth_令牌转换为auth%5Ftoken=abcd请使用RestClient查看我的答案以说明正确发送数据。我应该使用RestClient更新答案。这表明正确的数据是send,是一个json字符串。当点击API时,它正在进行编码。i、 例如,uu到%5FWell API/后端是一个不同的元素,但请求的发送肯定是正确的。为什么会被否决?我试图证明代码是正确的。