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

Redmine邮件处理:如何在Ruby的Net::HTTPS.post_form中添加Apache登录凭证

Redmine邮件处理请求添加Apache认证及诊断方案

一、添加Apache HTTP Basic认证

Apache要求的用户认证属于HTTP层面的Basic Auth,并非POST表单参数,所以直接往data哈希里添加user和password无效。需要改用完整的Net::HTTP请求流程来注入认证头,替换原有的post_form调用:

# 替换原有的post_form调用代码
uri_obj = URI.parse(uri)
http = Net::HTTP.new(uri_obj.host, uri_obj.port)
http.use_ssl = uri_obj.scheme == 'https'

# 保留原有的SSL相关配置
if no_check_certificate
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
if certificate_bundle
  http.ca_file = certificate_bundle
end

# 设置Apache Basic认证凭证
http.basic_auth('你的Apache用户名', '你的Apache密码')

# 构建POST请求并设置表单数据
request = Net::HTTP::Post.new(uri_obj)
request.set_form_data(data)

# 追加原有的请求头
headers.each { |key, value| request[key] = value }

# 发送请求并获取响应
response = http.request(request)

二、获取输入参数与诊断输出

1. 打印输入参数

在请求发送前添加代码,输出uri、data、headers的详细信息,方便排查问题:

# 直接打印到控制台(适合测试场景)
puts "请求URI: #{uri}"
puts "POST表单数据: #{data.inspect}"
puts "请求头信息: #{headers.inspect}"

# 或者写入日志文件(适合生产环境)
log_path = '/var/log/redmine_mail_handler.log'
File.open(log_path, 'a') do |f|
  f.puts "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} - 请求URI: #{uri}"
  f.puts "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} - POST表单数据: #{data.inspect}"
  f.puts "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} - 请求头信息: #{headers.inspect}"
end

2. 获取请求诊断输出

发送请求后,输出响应的状态码和内容,确认请求执行结果:

# 打印响应信息
puts "响应状态码: #{response.code}"
puts "响应内容: #{response.body}"

# 写入日志文件
File.open(log_path, 'a') do |f|
  f.puts "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} - 响应状态码: #{response.code}"
  f.puts "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} - 响应内容: #{response.body}"
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:42:43