Ruby on Rails调用circle.so API出现not an HTTP URI错误如何解决
报错原因
你遇到的not an HTTP URI错误,本质是传入URI()方法的字符串缺少合法的HTTP/HTTPS协议前缀。
Postman会对没有显式标注协议的请求自动补全默认协议(通常优先匹配HTTPS),因此同样的请求地址在Postman中可以正常运行;但Ruby标准库的URI类没有这类兜底处理逻辑,不带协议头的地址字符串会被判定为非HTTP类URI,直接抛出参数异常。
修正方法
- 首先补全URI的协议头,将原代码中
url = URI("hub.atlas.fm/api/v1/community_members")
修改为url = URI("https://hub.atlas.fm/api/v1/community_members") - 如果对接的API走HTTPS协议,需要在Net::HTTP的初始化配置中显式开启SSL支持,否则请求会直接连接失败,修正后的完整代码如下:
require "uri" require "net/http" url = URI("https://hub.atlas.fm/api/v1/community_members") http = Net::HTTP.new(url.host, url.port) # 开启HTTPS请求支持 http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = "phdbM12mVAiEyLF19UjoYdiU" response = http.request(request) puts response.read_body
额外注意
- 不要在Rails业务代码中硬编码API鉴权密钥,建议将这类敏感配置存入Rails加密凭证或环境变量中,避免密钥意外泄露
- 原生Net::HTTP的配置相对繁琐,长期迭代的项目可以考虑使用轻量第三方HTTP客户端简化请求逻辑
内容的提问来源于stack exchange,提问作者Lovely Joy Figueras
相关产品推荐
相关产品推荐

