2015-01-30 2 views
0

Начал работу над Ruby неделю назад. Написание API для подключения к очереди сообщений RabbitMQ. Командная строка для добавления нового пользователя работает.Ruby API (RabbitMQ create user)

$ локон -i -u гость: гость -H "Content-Type: применение/JSON" -XPUT -d '{ "пароль": "PWD", "метки": "администратор"}' http://localhost:15672/api/users/username

Мне нужно сделать этот запрос Http Put от Ruby. Следующий мой код: Защиту test_add_user

uri = URI.parse('http://localhost:15672/api/users/karthik/') 
uri.to_s 
http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Put.new(uri.path) 
request.basic_auth 'guest', 'guest' 
request['Content-Type'] = 'application/json' 
request['Accept'] = 'application/json' 
request.set_form_data({'password' => 'secret', 'tags' => 'management'}) 
http.start do |http| 
res = http.request(request) 
puts res 
end 

конец

Это результат я получаю

o.test_add_user 
#<Net::HTTPUnsupportedMediaType:0x007fd7fb6fe1d8> 
=> nil 

ли СМИ тип исключения связаны с Content-Type? Только применение/json разрешено

Должен ли я использовать что-либо наподобие to_json? Если да, то где его использовать? Заранее спасибо.

С уважением Karthik

+0

Вы не правы '=> nil' будучи' res'. 'puts' возвращает' nil', но 'res' equals' # 'означает, что ошибка, которую вы получаете, связана с неподдерживаемым типом носителя. – ptd

+0

Спасибо за разъяснение. Я ожидал, что число скажет 403 или 415. – Karthik

+0

Я подозреваю, что set_form_data не передает JSON. Вместо 'request.set_form_data()' use 'request.body = '{" password ":" pwd "," tags ":" administrator "}'' (строка с JSON внутри) и посмотреть, работает ли это. –

ответ

2

Спасибо Гектора и PTD. Починил это. Приложил рабочий код для дальнейшего использования.

def test_add_user 
uri = URI.parse('http://localhost:15672/api/users/Test1/') 
http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Put.new(uri.path) 
request.basic_auth 'guest', 'guest' 
request['Content-Type'] = 'application/json' 
request['Accept'] = 'application/json' 
request.body = {'password' => 'secret', 'tags' => 'management'}.to_json 
http.start do |http| 
    res = http.request(request) 
    puts res 
    end 
end 

Добавляет нового пользователя в очереди RabbitMQ