2017-12-08 4 views
1

ウェブサイトからデータを取得するためのHTTPリクエストを作成しようとしています。 これを行うには、カスタムヘッダーを使用する必要があります。 私は郵便配達員と一緒にリクエストをするとき、カスタムヘッダーをうまく追加することですべてうまく動作します。カスタムヘッダーを削除すると、次のエラーメッセージが表示されます。{"error": "content not found"}これは正常です。HTTPリクエストはPostmanと連携しますが、Railsでは使用できません

私はRailsで同じリクエストを作成しようとしました。 これは私のコードです:

uri = URI.parse("https://www.itqi.com/api/master-descriptor") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
req = Net::HTTP::Get.new(uri.path) 
req["itqi-key"] = '************************' 
response = http.request(req) 

この場合、カスタムヘッダーを追加しました。しかし、これにもかかわらず、データはありません。このエラーメッセージは{"error": "content not found"}です。私のカスタムヘッダーが考慮されていなかったようです。私は成功なしに多くの可能性を試しました。

私を助けることができる人はいますか?私はアイデアが不足しています。

アドバイスをいただきありがとうございます。

敬具、

EDITここ

はファラデーと私のHTTPS要求である:

conn = Faraday.new(:url => 'https://www.itqi.com', :ssl => {:verify => false}) 
response = conn.get do |req| 
    req.url '/api/master-descriptor' 
    req.headers['Content-Type'] = 'application/json' 
    req.headers['itqi-key'] = '********************' 
end 

そして、ここでサーバーの応答です:

応答:#https ://www.itqi.com/api/master-descriptor> @ request =#@request_headers = {"U 「エージェント」=>「ファラデーv0.12.2」、「コンテンツタイプ」=>「アプリケーション/ json」、「itqi-key」=>「**************** ****** "} @ ssl =#@ response =#@response_headers = {" date "=>" Wed、13 Dec 2011 08:25:53 GMT "、" server "=>" Apache/2.4.10 (Debian)」、「content-length」=>「29」、「connection」=>「close」、「content-type」=>「application/json;文字セット= UTF-8 "}ステータス@ = 404 @ reason_phrase =" "が見つかりませんでした>>

常に同じ問題:(

************** **********解決策*************************

いくつかの調査の後で、 。。ヘッダーキーはRailsのでは大文字と小文字が区別されますので、問題を解決するために、私はそれがないと小文字にそれらを置くためにRailsのを強制しなければならなかった、Railsは体系的に大文字

は、私の解決策があります:。

conn = Faraday.new(url: 'https://www.itqi.com', ssl: {verify: false}) do |conn| 
    conn.request :json 
    conn.response :json, :content_type => /\bjson$/ 
    conn.adapter Faraday.default_adapter 
end 
response = conn.get do |req| 
    req.url '/api/master-descriptor' 
    itqi_key = CaseSensitiveString.new('itqi-key') 
    req.headers[itqi_key] = '************************' 
end 

class CaseSensitiveString < String 
    def downcase 
    self 
    end 
    def capitalize 
    self 
    end 

    def to_s 
    self 
    end 
end 

答えて

0

コードはhttp://ruby-doc.org/stdlib-2.0.0/libdoc/net/http/rdoc/Net/HTTP.html#label-Setting+Headersの例とは異なります。

しかし、ファラデー(https://github.com/lostisland/faraday)に切り替えるともっと幸せになることをお勧めします。

+0

あなたの答えをありがとう。私はファラデーを使った。しかし、私は同じ問題があります。 {"error": "content not found"}というエラーメッセージが再び表示されます。このヘッダーを追加するにはどうすればいいですか?{"itqi-key" => '**********************'} – Wivi0

+0

あなたのコードはどうなっていますか?それは次のようなものを行うべきです(大文字小文字の区別)。 'conn.get do | req | req.headers ['Content-Type'] = 'application/json' end' –

+0

ファラデーとサーバーレスポンスでコードを含めるように自分の投稿を編集しました。私のヘッダーが考慮されていない理由を知っていますか?ご協力いただきありがとうございます。 – Wivi0

関連する問題