Is it possible to make a POST request from Ruby with open-uri?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Unfortunately open-uri
only supports the GET
verb.
You can either drop down a level and use net/http
, or use rest-open-uri
, which was designed to support POST
and other verbs. You can do gem install rest-open-uri
to install it.
回答2:
require 'open-uri'
require 'net/http'
params = {'param1' => 'value1', 'param2' => 'value2'}
url = URI.parse('http://thewebsite.com/thepath')
resp, data = Net::HTTP.post_form(url, params)
puts resp.inspect
puts data.inspect
It worked for me :)
回答3:
I'd also really recommend rest-client. It's a great base for writing an API client.
回答4:
As simple as it gets:
require 'open-uri'
require 'net/http'
response = Net::HTTP.post_form(URI.parse("https://httpbin.org/post"), { a: 1 })
puts response.code
puts response.message
puts response.body
I recommend using response.methods - Object.methods
to see all the available methods, e.g. message
, header,
Bonus: POST / DELETE requests:
puts Net::HTTP.new("httpbin.org").post("/post", "a=1").body
puts Net::HTTP.new("httpbin.org").delete("/delete").body