【rails】【CGI】たかがhttps、されどhttps。どはまりした内容をまとめました。
httpsでハマッたのでまとめみました。
黒の太字は個人的に重要だと感じた箇所です。
require 'uri'
require 'net/http'
def self.urlcheck
hogehoges = hogehoge.where('created_at is not null')
hogehoge = hogehoges[0]
response = nil
url = 'https://hoge1.com/hoge2-bin/hoge3.cgi?'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.set_debug_output $stderr
http.start do |h|
#リクエストインスタンス生成
request = Net::HTTP::Post.new(uri.path)
#ヘッダー部
request["user-agent"] = "Ruby/#{RUBY_VERSION} MyHttpClient"
#ボディ部
#第二引数は省略可能
request.set_form_data({
:ip=>user.ip,
:name=>user.name
}, "&")
#送信
response = h.request(request)
end
end
ハマった箇所
1・https用の独自設定
http.use_ssl = trueや、http.verify_mode = OpenSSL::SSL::VERIFY_NONE
といった設定が必要になり、httpの実装とは違ってはまりました。
2・http.set_debug_output $stderrを使用しなかった
http.set_debug_output $stderrはログをrails cosoleに表示させるコードで
このコードを仕込まなかったために、「どこで落ちているのか」、「どこまでは大丈夫なのか」が分かりませんでした。
3・パラメタの連結の記述方法を理解してない
request.set_form_data()を使用するところまでは理解できていたが、パラメタの連結が上手くいかずにハマった。
request.set_form_data()のオプションで「"&"」を付けたことで解決できた。
みなさんがハマる前にこちらを参考にして頂けたら幸いです。