1

NET:HTTP gemを使用してクライアントのhttpヘッダーにAPIキーを追加しようとしていますが、テストしてみると、何らかの理由で機能していないようです。基本的に、サーバーには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 に答える