Ответ Api - это страница перенаправления HTML, а я ожидаю ответа JSON

Я использую гем Фарадея для запроса некоторых данных из LibreNMS API. Но когда я показываю тело ответа, я получаю некоторый HTML-код, который выглядит как страница перенаправления для входа в libreNMS.

У меня есть следующий код (класс BaseService):

def libre_connection
Faraday.new(url: 'https://librenms.mydomain.nl') do |conn|
  conn.path_prefix = "/api/v0"
  conn.response :json, :content_type => /\bjson$/, :parser_options => { :symbolize_names => true }

  conn.headers['X-Auth-Token'] = Rails.application.credentials[:libre][:key]
  conn.headers["Content-Type"] = "application/json"



  conn.adapter Faraday.default_adapter

end

И затем это в классе, который расширяет BaseService

def call()
    response = libre_connection.get "/ports/25008.json"
end

Почему-то это дает такой ответ:

<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta http-equiv="refresh" content="0;url=https://librenms.mydomain.nl/login" /> <title>Redirecting to https://librenms.mydomain.nl/login</title> </head> <body> Redirecting to <a href="https://librenms.mydomain.nl/login">https://librenms.mydomain.nl/login</a>. </body> </html> 

Я знаю, что токен работает, потому что когда я выполняю следующую команду curl, я получаю ответ JSON, который я ожидал

curl -H 'X-Auth-Token: MYAPITOKEN' https://librenms.mydomain.nl/api/v0/ports/25008

Кто-нибудь знает, что я делаю не так?

2 ответа

Спасибо за ответ, ребята, разобрался. Проблема была в классе, который расширяет BaseService, вот как это выглядит сейчас:

class LibrenmsApi::ConnectionsService < LibrenmsApi::BaseService
def call()
    response = libre_connection.get "ports/25008"
end
end

обратите внимание на часть "ports/25008". Я удалил '/' в начале, и это исправило.

Вы пытаетесь подключиться по HTTPS. Для локальной разработки вы можете попробовать:

def libre_connection
  Faraday.new(url: 'https://librenms.mydomain.nl') do |conn|
    conn.ssl.verify = false # DONT DO THIS IN PRODUCTION
    conn.path_prefix = "/api/v0"
    conn.response :json, :content_type => /\bjson$/, :parser_options => { :symbolize_names => true }

    conn.headers['X-Auth-Token'] = Rails.application.credentials[:libre][:key]
    conn.headers["Content-Type"] = "application/json"

    conn.adapter Faraday.default_adapter
  end
end

Для производства см. https://github.com/lostisland/faraday/wiki/Setting-up-SSL-certificates, чтобы узнать, как правильно настроить SSL.

Другие вопросы по тегам