You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在nba_stats gem中配置RestClient代理遇到URI无效错误

解决nba_stats gem配置Crawlera代理的问题

咱们先来拆解你遇到的两个问题,然后给出可行的解决方案:

为什么第一个代理配置会报错?

你第一次尝试的代理地址http://123@proxy.crawlera.com:8010触发URI::InvalidURIError,是因为URI规范要求用户认证部分必须是user:password格式——哪怕密码为空,也需要保留冒号来分隔用户名和密码。你的地址里只有用户名,没有冒号,导致URI解析失败。

为什么URI对象的尝试也失败?

你给uri.user赋值了带冒号的字符串("83a17a4219d543ef8800965d4293ac5d:"),这是错误的:URI对象的user属性只存储用户名,密码需要单独赋值给password字段。另外,RestClient的proxy属性需要的是字符串格式的代理地址,直接传URI对象可能存在兼容性问题。

正确的配置方式

因为nba_stats gem是通过RestClient::Resource发起请求的,而RestClient::Resource会继承全局的RestClient.proxy设置,所以只要正确配置全局代理就能生效。针对Crawlera的代理(不需要密码,只需要API密钥作为用户名),有两种正确写法:

方式1:直接用符合规范的字符串

# 替换成你的Crawlera API密钥
crawlera_api_key = "83a17a4219d543ef8800965d4293ac5d"
# 关键:用户名后加冒号再跟@,表示密码为空
RestClient.proxy = "http://#{crawlera_api_key}:@proxy.crawlera.com:8010"

# 正常初始化客户端并调用接口
client = NbaStats::Client.new
play_by_play = client.play_by_play('0021301230')

方式2:用URI对象正确构建后转字符串

require 'uri'

crawlera_api_key = "83a17a4219d543ef8800965d4293ac5d"
uri = URI.parse("http://proxy.crawlera.com:8010")
uri.user = crawlera_api_key
uri.password = "" # 明确设置空密码
RestClient.proxy = uri.to_s # 转成字符串后赋值

client = NbaStats::Client.new
play_by_play = client.play_by_play('0021301230')

验证逻辑

你看到的gem代码@resource ||= RestClient::Resource.new(endpoint),说明它创建的RestClient::Resource实例会自动使用全局的RestClient.proxy配置,所以只要全局代理设置正确,gem的请求就会走代理。

内容的提问来源于stack exchange,提问作者Adam12344

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:25:50