带头的Ruby https POST

如何在带有json的Ruby中使用标题创建一个Httpspost?

我试过了:

uri = URI.parse("https://...") https = Net::HTTP.new(uri.host,uri.port) req = Net::HTTP::Post.new(uri.path) req['foo'] = bar res = https.request(req) puts res.body 

这是一个json的问题。 这解决了我的问题。 无论如何,我的问题不明确,所以赏金归于Juri

 require 'uri' require 'net/http' require 'net/https' require 'json' @toSend = { "date" => "2012-07-02", "aaaa" => "bbbbb", "cccc" => "dddd" }.to_json uri = URI.parse("https:/...") https = Net::HTTP.new(uri.host,uri.port) https.use_ssl = true req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'}) req['foo'] = 'bar' req.body = "[ #{@toSend} ]" res = https.request(req) puts "Response #{res.code} #{res.message}: #{res.body}" 

尝试:

 require 'net/http' require 'net/https' uri = URI.parse("https://...") https = Net::HTTP.new(uri.host,uri.port) https.use_ssl = true req = Net::HTTP::Post.new(uri.path) req['foo'] = bar res = https.request(req) puts res.body 

默认安全示例:

 require 'net/http' require 'net/https' req = Net::HTTP::Post.new("/some/page.json", {'Content-Type' =>'application/json'}) req.body = your_post_body_json_or_whatever http = Net::HTTP.new('www.example.com', 443) http.use_ssl = true http.ssl_version = :TLSv1 # ruby >= 2.0 supports :TLSv1_1 and :TLSv1_2. # SSLv3 is broken at time of writing (POODLE), and it's old anyway. http.verify_mode = OpenSSL::SSL::VERIFY_PEER # please don't use verify_none. # if you want to verify a server is from a certain signing authority, # (self-signed certs, for example), do this: http.ca_file = 'my-signing-authority.crt' response = http.start {|http| http.request(req) } 

这是一种使用Net :: HTTP的更简洁的方法。 如果你只想获得响应并扔掉其他物体,这非常有用。

 require 'net/http' require 'json' uri = URI("https://example.com/path") res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http| req = Net::HTTP::Post.new(uri) req['Content-Type'] = 'application/json' # The body needs to be a JSON string, use whatever you know to parse Hash to JSON req.body = {a: 1}.to_json http.request(req) end # The "res" is what you need, get content from "res.body". It's a JSON string too. 

它的工作原理,您可以像这样传递数据和标题:

 header = {header part} data = {"a"=> "123"} uri = URI.parse("https://anyurl.com") https = Net::HTTP.new(uri.host,uri.port) https.use_ssl = true req = Net::HTTP::Post.new(uri.path, header) req.body = data.to_json res = https.request(req) puts "Response #{res.code} #{res.message}: #{res.body}"