如何使用Ruby内置模块发送带请求头的HTTPS请求
使用Ruby内置模块发送带请求头的HTTPS请求解决方案
我明白你折腾了半天查文档、做测试、搜资料,还是没搞定用Ruby内置模块发带请求头的HTTPS请求——别着急,咱们用Ruby自带的Net::HTTP模块就能轻松实现,我给你详细拆解步骤、示例代码,顺便说下大家常踩的坑。
完整可运行示例代码
先给你一个直接能用的版本,涵盖HTTPS、自定义请求头的核心逻辑:
require 'net/http' require 'uri' # 替换成你的目标接口URL target_uri = URI('https://example.com/api/your-endpoint') # 初始化HTTPS连接 http_client = Net::HTTP.new(target_uri.host, target_uri.port) http_client.use_ssl = true # 必须开启这行,否则是HTTP请求 # 构建请求并添加自定义请求头 request = Net::HTTP::Get.new(target_uri) # 这里根据你的需求添加请求头,格式和哈希操作一致 request['Authorization'] = 'Bearer your-access-token-here' request['Content-Type'] = 'application/json' request['X-Your-Custom-Header'] = 'custom-value' # 发送请求并获取响应 response = http_client.request(request) # 处理响应结果 puts "响应状态码: #{response.code}" puts "响应内容: #{response.body}"
针对你失败情况的常见排查点
你之前尝试没成功,大概率是踩了这些坑:
- 忘了开启SSL:
http_client.use_ssl = true是HTTPS请求的核心,没加这行的话,即使URL是https开头,也会走HTTP协议,直接报错 - SSL证书验证失败:如果遇到证书相关错误,测试阶段可以临时关闭验证(生产环境绝对不能这么做):
http_client.verify_mode = OpenSSL::SSL::VERIFY_NONE;生产环境建议指定合法的CA证书路径:http_client.ca_file = '/path/to/your-ca-cert.pem' - 请求方法不匹配:如果接口要求POST请求,把
Net::HTTP::Get.new换成Net::HTTP::Post.new,如果要发送JSON体,还要加上request.body = JSON.generate({key: 'value'})(记得先引入json模块) - 请求头格式错误:比如Authorization头的
Bearer后面必须加空格,Content-Type要和请求体类型对应(比如发表单就用application/x-www-form-urlencoded)
更简洁的链式写法
Ruby还支持用Net::HTTP.start链式调用,自动管理连接的打开和关闭,代码更简洁安全:
require 'net/http' require 'uri' target_uri = URI('https://example.com/api/your-endpoint') response = Net::HTTP.start(target_uri.host, target_uri.port, use_ssl: true) do |http| request = Net::HTTP::Get.new(target_uri) request['Authorization'] = 'Bearer your-access-token-here' request['Content-Type'] = 'application/json' http.request(request) end puts response.body
内容的提问来源于stack exchange,提问作者Free TNT
相关产品推荐
相关产品推荐

