1

我正在尝试使用 NET:HTTP gem 将 api-key 添加到客户端的 http 标头,但是当我尝试对其进行测试时,它似乎无法正常工作。基本上服务器需要 http客户端的标头或具有 http_x_api 标头的任何内容以便为请求提供服务。

服务器代码

   require 'sinatra'

   before do
     halt 400 if (env['API_KEY']) != 'wow'
  end

   get '/' do
     "boo"
   end

客户端代码

    require 'net/http'
    require 'uri'

    port = ENV['PORT'] || '7474'

    res = Net::HTTP.start('localhost', port )  { |h| h.get('/')} 
    res.add_field('api-key', 'wow')
    res.each_header do |key, value|
      p "#{key} => #{value}"
    end        
    puts (res.code == '200' && res.body == 'boo') ? 'OK' : 'FAIL'

    this the response i get back :=>

   "x-frame-options => sameorigin"
   "x-xss-protection => 1; mode=block"
   "content-type => text/html;charset=utf-8"
   "content-length => 0"
   "connection => keep-alive"
   "server => thin 1.5.0 codename Knife"
   "api-key => wow"
    FAIL
4

1 回答 1

0

在服务器上,HTTP头变量中env的前缀是HTTP_,所以你需要检查env['HTTP_API_KEY']. 从文档中

HTTP_变量:对应于客户端提供的 HTTP 请求标头的变量(即名称以 HTTP_ 开头的变量)。这些变量的存在与否应与请求中相应 HTTP 标头的存在或不存在相对应。

于 2012-10-05T06:55:41.570 回答