URL があり、HTTP GET を使用してクエリをページに渡しています。最新のフレーバー ( net/http
) では、スクリプトが 302 応答を超えません。HTTPClient、net/http、Rest-Client、Patron など、いくつかの異なるソリューションを試しました。
そのページの HTML の属性タグを検証するために、最終ページに進む方法が必要です。リダイレクトは、モバイル ユーザー エージェントがモバイル ビューにリダイレクトするページにアクセスしたために発生するため、ヘッダーにモバイル ユーザー エージェントが含まれます。現在のコードは次のとおりです。
require 'uri'
require 'net/http'
class Check_Get_Page
def more_http
url = URI.parse('my_url')
req, data = Net::HTTP::Get.new(url.path, {
'User-Agent' => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5'
})
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
cookie = res.response['set-cookie']
puts 'Body = ' + res.body
puts 'Message = ' + res.message
puts 'Code = ' + res.code
puts "Cookie \n" + cookie
end
end
m = Check_Get_Page.new
m.more_http
ご提案があればぜひお聞かせください。
ベストアンサー1
リダイレクトに従うには、次のようにします(ruby-doc から引用)
リダイレクトの続き
require 'net/http'
require 'uri'
def fetch(uri_str, limit = 10)
# You should choose better exception.
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
url = URI.parse(uri_str)
req = Net::HTTP::Get.new(url.path, { 'User-Agent' => 'Mozilla/5.0 (etc...)' })
response = Net::HTTP.start(url.host, url.port, use_ssl: true) { |http| http.request(req) }
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch(response['location'], limit - 1)
else
response.error!
end
end
print fetch('http://www.ruby-lang.org/')