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
相关产品推荐
相关产品推荐

