使用net/http发送Post请求

26

我需要将JSON数据发送到在同一台计算机上运行的另一个应用程序。
我发送请求的方式如下(rails 3.2.13)

 data = { //some data hash }
 url = URI.parse('http://localhost:6379/api/plans')
  resp, data = Net::HTTP.post_form(url, data.to_JSON )
  p resp
  p data
  { resp: resp, data: data.to_JSON }

但是我得到了 Net::HTTPBadResponse(错误状态行:“-ERR未知命令'POST'”):如何解决这个问题?

更新1
根据 @Raja-d 的建议更新了我的代码

  url = URI.parse('http://localhost:6379/v1/sessions')
  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = true
  resp, data = Net::HTTP.post_form(url, data)
  p resp
  p data

但我仍然遇到错误 Net::HTTPBadResponse(错误的状态行:“-ERR未知命令'POST'”)

请查看此链接:http://taimoorchangaizpucitian.wordpress.com/2013/05/07/how-to-fix-nethttpbadresponse-wrong-status-line-in-ruby/。 - Rajarshi Das
你能否使用curl或Chrome中的PostMan等外部工具发布到该URL? - mcfinnigan
我没有尝试那个Postman。这个应用程序不在我的控制之下。 - Elmor
1个回答

55

我不知道你的问题是什么,但是这样怎么样?

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri.path, {'Content-Type' => 'application/json'})
request.body = data.to_json

response = http.request(request)

4
为什么不能直接调用http.post(..)呢? :) 这是关于方法的说明。 - Arup Rakshit
1
如何将帖子参数添加到http.post? - Nathan B
1
@NathanB 我知道这已经晚了3年,但以防其他人有同样的问题,参数被传递到数据变量中。data = {"whatever": array_or_hash, "password_param": "password"} 然后在目标站点上,您可以调用params["whatever"]或params["password_param"]来访问发送的数据。 - tomb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接