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

Rails中如何通过Net::HTTP发送认证Token?curl示例及问题求助

正确在Rails中用Net::HTTP发送带Basic认证的HTTPS请求

你踩的坑我之前也遇到过!问题出在对curl -u参数的理解上:-u "token:53555"是用来发起HTTP Basic认证的,不是把token塞到自定义请求头里。你当前的Net::HTTP代码把token当成了自定义Header,这和curl的行为完全不匹配,自然会认证失败。

给你两种正确的实现方式,推荐第一种更简洁的:

方法一:使用Net::HTTP内置的Basic认证方法

这种方式和curl的-u行为完全一致,Net::HTTP会自动帮你处理base64编码和Authorization头的设置:

uri = URI.parse("https://url/method")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true # 关键!HTTPS请求必须开启SSL

# 设置Basic认证,第一个参数是用户名(这里是"token"),第二个是密码(这里是"53555")
request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth("token", "53555")

response = http.request(request)

方法二:手动构造Authorization请求头

如果你想手动实现(不推荐,不如方法一省心),可以自己编码并设置请求头:

uri = URI.parse("https://url/method")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri.request_uri)
# 对"token:53555"进行base64编码,然后构造Basic认证头
auth_string = Base64.strict_encode64("token:53555")
request["Authorization"] = "Basic #{auth_string}"

response = http.request(request)

额外提醒

如果目标服务器用的是自签名SSL证书,本地测试时可能需要临时关闭证书验证(生产环境绝对不要这么做!):

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:56:32