Ruby https POST with headers

后端 未结 5 810
花落未央
花落未央 2020-12-08 02:38

How can I make a Https post with a header in Ruby with a json?

I have tried:

uri = URI.parse(\"https://...\")
    https = Net::HTTP.new(uri.host,uri.         


        
相关标签:
5条回答
  • 2020-12-08 03:09

    A secure-by-default example:

    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) }
    
    0 讨论(0)
  • 2020-12-08 03:15

    The problem it was a json. This solve my problem. Anyway, my question was not clear, so the bounty goes to Juri

    require 'uri'
    require 'net/http'
    require 'net/https'
    require 'json'
    
    @toSend = {
        "date" => "2012-07-02",
        "aaaa" => "bbbbb",
        "cccc" => "ffffdd"
    }.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}"
    
    0 讨论(0)
  • 2020-12-08 03:19

    Here's a cleaner way to use Net::HTTP. If you just want to get the response and throw other objects away this is quite useful.

    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.
    
    0 讨论(0)
  • 2020-12-08 03:21

    Its working, you can pass data and header like this:

    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}"
    
    0 讨论(0)
  • 2020-12-08 03:22

    Try:

    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
    
    0 讨论(0)
提交回复
热议问题