- 1. 概要
- 2. 書いてみる
- 3. 参考サイト
1. 概要
今度は、フォームの情報を渡してみます。
「GET」であれば、「URI」の後ろに「?」を書いて「&」でつないでいけばなんとかなるのですが。
「POST」で渡すには?
参考サイトに実例があるのでなんとかなりそうな気がします。
2. 書いてみる
いささか時間がかかりましたが、なんとかなりました。
#!/usr/bin/env ruby
=begin
ウェブアクセスしてコンテンツを受け取る
=end
require('net/http')
require('nokogiri')
require('open-uri')
require('openssl')
require('pry')
require('uri')
begin
if ARGV.size() < 1
puts('URI なし')
exit
end
uri = ARGV[0];
uri = URI.encode(uri)
uri = URI.parse(uri)
http = Net::HTTP::new(uri.host, uri.port)
if (uri.port == 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
post = Net::HTTP::Post::new(uri.path)
hash = Hash.new
ARGV[1..-1].each do | param |
array = param.split('=')
hash[array[0]] = array[1]
end
post.set_form_data(hash, ';')
response = http.start do | value |
value.request(post)
end
html = response.body
doc = Nokogiri::HTML(html)
# binding.pry
if (doc.title[0, 3] == '405')
end
puts("#{response.body}");
rescue => error
puts("#{error}")
puts("#{error.class}")
error.backtrace_locations.each do | line |
puts("#{line}")
end
puts("[#{there.class.name}][#{error.message}]")
end
これは以下の形式で実行します。
./ソースファイル名.rb URI [インプット名=値 インプット名=値 ...]
覚えているうちにメモしておきますと。
27~30行目、アクセス先が「SSL」であった場合に証明書エラーが発生しないための工夫。
32行目、「POST」リクエストのクラスを定義。
34~39行目、2番目以降の引数を「POST」で渡す、インプット名と値のハッシュとして展開しています。
41行目、「POST」データを設定。
43~45行目、オープンして「POST」データを渡してその結果を受け取ります。
47行目、受け取ったコンテンツの内容を表示しています。
戻り値自体は「Net::HTTPResponse」のクラスになっています。
「Net::HTTPResponse」クラスについては「Ruby 2.4.0 リファレンスマニュアル - ライブラリ一覧 - net/httpライブラリ - Net::HTTPResponseクラス」をご参照ください。
3. 参考サイト
本ページは、下記のサイトを参考にさせていただきました。
「Ruby 2.4.0 リファレンスマニュアル - ライブラリ一覧 - net/httpライブラリ」
「Ruby で GET リクエストや POST リクエストした時のメモ」
|
|