2016-04-03 48 views
0

HTTP GET/POST isteği ile ilgili yeni bir kullanıcıyım. Bir çeşit izin gerektiren bir get isteği kullanmak istiyorum.HTTP Oturum anahtarı ile oturum açma isteği

Aşağıdaki api'yi API DOCUMENTATION kullanmaya çalışıyorum.

altında

buna aşağıdaki parametreleri istediğini söylüyor "listesini almak":

require 'openssl' 
    require 'base64' 
    require 'uri' 
    require 'net/http' 
    require 'json' 

    username = 'MYUSERNAME' 
    password = 'MYPASSWORD' 
    service = 'NEXTAPI' 

    # Create auth                       
    string = Base64.encode64(username) + ':' + Base64.encode64(password) + ':' + Base64.encode64((Time.now.\ 
    to_i * 1000).to_s) 
    public_key_data = File.read(service + '_TEST_public.pem') 
    public_key = OpenSSL::PKey::RSA.new(public_key_data) 
    auth = URI::escape(Base64.encode64(public_key.public_encrypt(string)), 
         Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) 

    # Setup HTTPS                       
    http = Net::HTTP.new('api.test.nordnet.se', 443) 
    http.use_ssl = true 

    # Get status of server                     
    response = http.get('/next/2/', {'Accept' => 'application/json'}) 
    puts response.body 

    # POST login                        
    response = http.post('/next/2/login', "auth=#{auth}&service=#{service}", {'Accept' => 'application/json'}) 
    puts response.body 
    data = JSON.parse(response.body) 
    session_key = data['session_key'] 

    auth_string = "Basic " + session_key + ":" + session_key 
    response = http.get('/next/2/lists', {'Authorization' => auth_string }) 
    puts response 
:

Parameters 
- Accept-Language: Language prefered in the response. Note: nb and nn will return the same as no header string 
- Authorization: Basic auth. The session_id should be sent as both username and password header string 

Kendimi yetkilendirmek için aşağıdaki kodu kullanabilirsiniz, ancak son "istekleri GET" hata veriyor

Burada neyin yanlış gittiğinden emin değil misiniz? Ya da ne yapmam gerekiyor. Aşağıdaki hatayı alıyorum.

#<Net::HTTPNotAcceptable:0x007fac74276d20> 

Soru 1: Oturum anahtarımı hem kullanıcı adı hem de parola olarak nasıl düzgün gönderirim? Soru 2: Gerçekten nasıl parametre ve başlık gönderirim ve farklılıklar nelerdir? Soru 3: Bir GET veya POST talebi gönderdiğime bağlı olarak, üstbilgiler/parametreler açısından neyin gerekli olacağı bir farklılık var mı?

Teşekkürler

cevap

0

Bunu çözebildi. Aşağıda, Tamam kodudur ...

  require 'openssl' 
      require 'base64' 
      require 'uri' 
      require 'net/https' 
      require 'json' 
      require 'cgi' 

      username = 'USERNAME' 
      password = 'PASSWORD' 
      service = 'NEXTAPI' 

      def http_get(path,params) 
       http = Net::HTTP.new('api.test.nordnet.se', 443) 
       http.use_ssl = true 

       #return http.get("#{path}?", params) 
       return http.get("#{path}?") 
       #return Net::HTTP.get(path) 
      end 

      # Create auth                       
      string = Base64.encode64(username) + ':' + Base64.encode64(password) + ':' + Base64.encode64((Time.now.\ 
      to_i * 1000).to_s) 
      public_key_data = File.read(service + '_TEST_public.pem') 
      public_key = OpenSSL::PKey::RSA.new(public_key_data) 
      auth = URI::escape(Base64.encode64(public_key.public_encrypt(string)), 
           Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) 

      # Setup HTTPS                       
      http = Net::HTTP.new('api.test.nordnet.se', 443) 
      http.use_ssl = true 

      # Get status of server                     
      response = http.get('/next/2/', {'Accept' => 'application/json'}) 
      puts response.body 

      # POST login                        
      response = http.post('/next/2/login', "auth=#{auth}&service=#{service}", {'Accept' => 'application/json'}) 
      puts response.body 

      data = JSON.parse(response.body) 
      session_key = data['session_key'] 

      uri = URI('https://api.test.nordnet.se:443/next/2/lists') 

      Net::HTTP.start(uri.host, uri.port, 
       :use_ssl => uri.scheme == 'https', 
       :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http| 

       request = Net::HTTP::Get.new uri.request_uri 
       request.add_field('Accept', 'application/json') 
       request.basic_auth session_key, session_key 

       response = http.request request # Net::HTTPResponse object 

       puts response.body# puts response.body 
      end