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

