私は非常に単純なAPIを持っています。必要に応じてrubyを使用してPOSTを行い、GEMを使用してライブラリを構築するのはnet/http
、uri
、openssl
です。SSLを使用したRuby Net :: HTTP
とにかく、以下のコードを使用して非常に単純なPOST要求を行っていますが、非常に奇妙な結果が出ていて、他の誰かがこれを見ていることを期待していました。
私はPOSTMANとNodeJSとBOTHで以下の同じリクエストをテストしましたが、予想通りに動作します。私が動作させることができないのはRubyだけです。
require 'uri'
require 'net/http'
require 'openssl'
url = URI("https://somesite.dev/devices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["key"] = '1234567'
response = http.request(request)
puts response.read_body
結果は、私が前に見たことがないものです:私は二回、ヘッダーkey
を取得しています...だからAPIへのログは、このようなクエリを示しています
SELECT * FROM device where key = '1234567, 1234567' LIMIT ...
述べたように私はPOSTMANまたはNodeJSを介して同じリクエストを行い、正しい結果を得ることができます。
注:私はAPIのローカルコピーを持っているので、私はローカルでテストすることができますが、SSLではありません。要求をローカルで行うときは、うまく動作します。だから私はこの問題がSSLが導入されたときにそれを提示することしか伝えていない。
何か助けが素晴らしいだろう!ありがとう!!
Rubyのバージョン2.2.1
新しいプロトコルを作成しない限り、Net :: HTTPではなく、確立された[Ruby HTTPクライアント](https://www.ruby-toolbox.com/categories/http_clients)のいずれかを使用することをお勧めします。車輪を再開すると、多くの時間を浪費し、多くの欲求不満を引き起こす可能性があります。どちらを使用するかは、あなたが判断するためのものです。 SSLはこの問題を引き起こすことはできません。単にパイプラインに過ぎません。もっと多くのコードがなければ、問題を本当に診断することはできません。サーバー側APIには、データのSSL側の処理に問題がある可能性があります。 "[ask]"とリンクされたページを読み、 "[mcve]"が役に立ちます。 –
APIがチェックされ、再度、私はPOSTMANやNodeJSでCurlと一緒にテストされた別のプログラミング言語で同じリクエストを行うことができ、それらはすべて期待どおりに動作します。私は残りのクライアントを使用して同じ問題を解決しようとしていますので、私は何が起こっているのか把握できるかどうかを今すぐGEMから取り返したかったのです。 – gregwinn
さて、このように考えてみましょう.SSLパイプはRailsやその他のクライアントで非常に重くテストされています。データが重複していたり、データが破損していたりすると、コードが話しているすべてのシステムに問題があります。問題のコードに基づいて問題を再現できるようにする必要があるため、さらに情報が必要になります。あなたのRubyのバージョンは古いです。これはRubyとそのOpenSSLに影響します。恐らくそれを更新することが役に立ちます。 –