Как написать этот запрос HTTPS POST в ruby?

Я новичок в Ruby и Rails.

Я хочу отправить запрос HTTP POST в своем приложении rails, запрос может быть вызван из командной строки, например:

   curl -X POST -u "username:password" \
   -H "Content-Type: application/json" \
   --data '{"device_tokens": ["0C676037F5FE3194F11709B"], "aps": {"alert": "Hello!"}}' \
   https://go.urbanairship.com/api/push/

Рубиновый код, который я написал (на самом деле это связующий код):

uri = URI('https://go.urbanairship.com/api/push')
Net::HTTP.start(uri.host, uri.port,  :use_ssl => uri.scheme == 'https') do |http|
    request = Net::HTTP::Post.new(uri.request_uri, initheader = {'Content-Type' =>'application/json'})
    request.basic_auth 'username', 'password'
    request.body = ActiveSupport::JSON.encode({'device_tokens' => ["4872AAB82341AEE600C6E219AA93BB38B5144176037F2056D65FE3194F11709B"], "aps" => {"alert" => "Hello!"}})
    response = http.request request # Net::HTTPResponse object
    puts response.body
end

Однако запуск кода ruby ​​​​в консоли Rails не дал ожидаемого результата (командная строка дает). Может ли кто-нибудь дать мне руку? Я пытался искать соответствующие сообщения и документы Ruby, однако моих знаний в Ruby недостаточно, чтобы решить эту проблему.


person Chris Chen    schedule 15.12.2011    source источник
comment
возможно, этот вопрос сможет вам помочь stackoverflow.com/questions/1719809/   -  person kaissun    schedule 15.12.2011
comment
Привет, я прочитал пост, но не мог понять   -  person Chris Chen    schedule 15.12.2011


Ответы (1)


Часто лучше создать небольшой клиентский класс. Мне нравится HTTParty за это:

require 'httparty'

class UAS
  include HTTParty

  base_uri "https://go.urbanairship.com"
  basic_auth 'username', 'password'
  default_params :output => 'json'
  @token = "4872AAB82341AEE600C6E219AA93BB38B5144176037F2056D65FE3194F11709B"

  def self.alert(message)
    post('/api/push/', {'device_tokens' => @token, 'aps' => {"alert" => message}})
  end
end

Затем вы используете его так:

UAS.alert('Hello!')
person Mark Thomas    schedule 15.12.2011