プロジェクトの場合、顧客のリモートAPIにアクセスできるように、Socks5プロキシを介してHTTPS呼び出しを行う必要があります。私が使用している元のコードは次のとおりです。
url = "/proxyValidate?service=#{migration_station_verification_url}&ticket=#{service_ticket}"
if Rails.env == 'development'
uri = URI.parse(soe_cas_url + url)
Net::HTTP.SOCKSProxy('127.0.0.1', 1080).start(uri.host, uri.port) do |http|
res = http.get(uri.path)
doc = Nokogiri::XML(res)
doc.remove_namespaces!
doc.xpath('//sessionId').first.content
end
else
http = Net::HTTP.new(soe_cas_url)
http.use_ssl = true
req = Net::HTTP::Get.new(url)
res = http.request(req)
doc = Nokogiri::XML(res)
doc.remove_namespaces!
doc.xpath('//sessionId').first.content
end
目標は、開発環境でのみプロキシを使用することです。プロキシを使用して電話をかけると、次のエラーが発生します。
間違ったステータス行: "<!DOCTYPE
これをグーグルで検索すると、 use_sslフラグをtrueに設定する必要があることがわかります。これは、開発サイクルの外部で機能します。socksifyを使用する場合、そのようなメカニズムはありません。これをdoブロック内で呼び出すと、セッションがすでに開始されているというエラーが表示されます。ブロックの外で呼び出すと、そのような関数が存在しないという例外が返されます。
socksifyプロキシを介してSSL/HTTPSを実行する方法を教えてもらえますか?
編集:
私は現在、次のコードを使用して、必要なものを取得するために純粋なソケットで遊んでいます。
socket = Socket::TCPSocket.open('127.0.0.1', 1080)
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
ssl_context.ca_file = File.join(Rails.root, 'ssl', 'cacert.pem')
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
ssl_socket.sync_close = true
ssl_socket.connect
request = "GET #{url} HTTP/1.1\r\nAccept: */*\r\nHost: #{soe_cas_url}"
ssl_socket.puts(request)
ssl_socket.puts("")
response = ""
while (line = ssl_socket.gets)
response << line
end
ただし、これはssl_socket.connectで失敗し、次のエラーが発生します。
ssl_connect syscallreturned = 5 errno = 0 state = sslv2 / v3 read server hello a
自己署名証明書を使用してみましたが、証明書などはありませんが、何も機能しないようです。エンドポイントがステージング環境の自己署名証明書に依存していることを私は知っています。