Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Post请求错误-Ruby和HttpParty_Ruby_Json_Httparty - Fatal编程技术网

Post请求错误-Ruby和HttpParty

Post请求错误-Ruby和HttpParty,ruby,json,httparty,Ruby,Json,Httparty,我试图使用ruby和httparty gem发出一个简单的post请求,但我一直得到401(未经授权)或500(内部服务器)的响应。我已经在Chrome extension-DHC(Dev Http Client)上成功地测试了该请求,它始终返回200个响应 我的剧本: require "json" require "httparty" file = JSON.parse File.read('file.json') response = HTTParty.post("https://api

我试图使用ruby和httparty gem发出一个简单的post请求,但我一直得到401(未经授权)或500(内部服务器)的响应。我已经在Chrome extension-DHC(Dev Http Client)上成功地测试了该请求,它始终返回200个响应

我的剧本:

require "json"
require "httparty"

file = JSON.parse File.read('file.json')

response = HTTParty.post("https://api.placeholder/uri", {
  :body => file,
  :headers => { "Content-Type" => "application/json", "Accept" => "application/json", "Authorization" => "token example-placeholder-token" }
})

puts response.body
puts response.code
puts response.message
返回的两个错误是:

➜  directory  ruby file.rb
{"valid":false}
401
Unauthorized
➜  directory  ruby file.rb
{"valid":false}
500
Internal Server Error

为了一个更简单的post请求进行调试,您必须小心使用ruby发送/接收json(在使用html时,使用传统的ajax方法可能会遇到麻烦)。因此,为它提供最“不可知”的文件格式(文本(或字符串)和最通用的键/值对格式要容易得多,我认为是这样:
application/x-www-form-urlencoded

这最终在控制台中给了我一个有效的200响应(注意,不是我最初的请求,因为它稍微复杂一点,但仍然是“概念证明”):


多亏了这个ajax教程:为解决这个问题提供了线索

有没有可能在chrome中,某个会话cookie允许您访问API,而在httparty中,考虑到您没有API,您无法访问它?(是的,也许代币有问题)。因为根据您的描述,问题可能出在API上,因为您到达服务器获取401/500,所以HTTParty实际上正在工作,传递的参数或API本身有问题确定感谢@Fire Dragon DoL将与API“管理员”进行检查,但我并不乐观,因为我认为他不擅长Ruby。不幸的是,在不了解API的情况下帮助你真的很难不担心@Fire Dragon DoL。这是我第一次密集地使用JSON API,但这似乎是一个非常麻烦的问题,因为令牌似乎很快就会过期。经常“登录”以检索新令牌解决了DHC中的这个问题。正如你所说,也许这是他们最终的问题,或者API根本不喜欢命令行中运行Ruby文件的请求?我认为Ruby根本不是问题。API的设计目的不是只在浏览器中运行,否则您不能在手机/平板电脑应用程序中使用它们,甚至不能在非基于浏览器的软件中使用它们。如果他们在执行请求时希望有一个浏览器头(在任何情况下,你都可以用Ruby来模拟),这看起来真的很奇怪。据我所知,只要正确设置标题,区分浏览器和命令行/任何东西的唯一方法就是发送一个带有javascript的html页面。但是考虑到这个API返回的是JSON,情况并非如此。
require "json"
require "httparty"

response = HTTParty.post("https://api.placeholder-uri",
  {
  :body => { :user => "placehodler-username", :password => "placeholder-password" }.to_json,
  :headers => { "Content-Type" => "text", "Accept" => "application/x-www-form-urlencoded" }
  })  

puts response.body
puts response.code
puts response.message