Web + Life Hack

〜True But Useless〜

【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?'

    uri = URI.parse(url)

 

    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()のオプションで「"&"」を付けたことで解決できた。

 

たかがhttps、されどhttps

みなさんがハマる前にこちらを参考にして頂けたら幸いです。