首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Api响应是HTML重定向页面,而我期望的是JSON响应

Api响应是HTML重定向页面,而我期望的是JSON响应
EN

Stack Overflow用户
提问于 2019-11-29 23:36:40
回答 2查看 397关注 0票数 1

我正在使用Faraday gem从LibreNMS API请求一些数据。但是,当我显示响应正文时,我得到了一些看起来像是指向libreNMS登录的重定向页面的HTML代码。

我有以下代码(BaseService类):

代码语言:javascript
复制
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的类中

代码语言:javascript
复制
def call()
    response = libre_connection.get "/ports/25008.json"
end

出于某种原因,这将产生以下响应:

代码语言:javascript
复制
<!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响应

代码语言:javascript
复制
curl -H 'X-Auth-Token: MYAPITOKEN' https://librenms.mydomain.nl/api/v0/ports/25008

有人知道我做错了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2019-11-30 05:26:37

您正在尝试通过HTTPS进行连接。对于本地开发,您可以尝试:

代码语言:javascript
复制
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。

票数 0
EN

Stack Overflow用户

发布于 2019-12-04 19:31:22

感谢回复的朋友们,我想通了。问题出在扩展BaseService的类中,如下所示:

代码语言:javascript
复制
class LibrenmsApi::ConnectionsService < LibrenmsApi::BaseService
def call()
    response = libre_connection.get "ports/25008"
end
end

注意"ports/25008“部分。我删除了开头的'/‘,这样就解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59107632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档