0

テキストファイルから行ごとに値を取得する単純なファザーをRubyで作成しようとしています。これらの値は、コンソールからユーザーが入力したGET URLパラメーターの記号 $fuzz$ に置き換えられます。

私は次のようなコードを書きました:

require 'net/http'

uri = URI(gets())

Net::HTTP.start(uri.host, uri.port) do |http|
  request = Net::HTTP::Get.new uri.request_uri
  response = http.request request 
  puts response.body
end

GET リクエストでコンソールからユーザーが指定した記号 $fuzz$ を、行ごとのファイルの内容に 1 つずつ置き換える方法がわかりません。

ファイルの最初の行のように ' または 1=1 であり、GET リクエスト /item.php?id=$fuzz$ に書き込まれた $fuzz$ シンボルをファイルからのこの行の内容に置き換えてから、これらのリクエストを起動したいと考えています。

たとえば、example.com/item.php?id=fuzz などの URL フォーム コンソールを取得すると、複数の行を含む 1 つのファイルが開きます。コンソールから取得したこの URL を編集して、「fuzz」という単語をファイル行に 1 つずつ置き換えて、これらの URL リクエストを送信し、ファイルの内容を GET リクエスト パラメータで単語 fuzz に置き換えてから、すべてのレスポンスを新しいファイルに保存したい.

4

1 に答える 1

0

これを 2 つのクラスに分割する必要があります。

require 'net/http'

class FileIdExtractor
  def ids_from_file(path_to_file)
    file = File.open(path_to_file) or die "Unable to open file..."
    content_array=[]
    file.each_line {|line| contentArray.push line }
    content_array
  end
end

class UrlToFile
  def initialize(url)
    @url = url
  end

  def write_content_to_file_for_id(id, doc)
    local_filename = "/tmp/#{id}.html"
    File.open(local_filename, 'w') {|f| f.write(doc) }
  end

  def get_html_content_from_id(id)
    full_url = @url + id
    open(full_url).read
  end

end

# to run it, something like
puts "What is the URL. use format http://example.com/item.php?id="
url = gets
ids = FileIdExtractor.new.ids_from_file("your-file-path")
ids.each do |id|
  url = UrlToFile.new(url)
  doc = url.get_html_content_from_id(id)
  url.write_content_to_file_for_id(id, doc)
end
于 2012-01-23T18:05:33.410 に答える