如何将在从控制台获取的 URL 中找到的特定字符串替换为在 Ruby 文本文件中写入的每一行中找到的文件内容?
Posted
技术标签:
【中文标题】如何将在从控制台获取的 URL 中找到的特定字符串替换为在 Ruby 文本文件中写入的每一行中找到的文件内容?【英文标题】:How to replace a particular string found in URL taken from console with file content found on each line written in text file in Ruby? 【发布时间】:2012-02-24 00:35:47 【问题描述】:我想用每行一个字符串的文本文件的内容替换从控制台获取的 URL 中写入的模糊词。 用文件内容替换这个模糊词后,想用这个替换的内容文件触发 http 请求,并将修改后的请求的响应存储在新文件中。
我是这样写的,但是报错了:
fuzz1.rb:16: private method `gsub' called for #<URI::HTTP:0x2969040> (NoMethodError)
代码在这里:
require 'net/http'
puts "Enter Target:\n"
target = URI(gets())
new_reference = target
a1 = target.clone
Net::HTTP.start(target.host, target.port) do |http|
request = Net::HTTP::Get.new target.request_uri
response = http.request request
puts response.body
end
puts "File contents:\n"
f= File.open("fuzz.txt","r")
while line = f.gets do
puts "Attack value: #line"
b = a1.gsub('fuzz','#line')
c = b
Net::HTTP.start(c.host, c.port) do |http|
request = Net::HTTP::Get.new c.request_uri
response = http.request request
puts response.body
end
end
不知道为什么会出现这个 gsub 错误,并且没有用文件行内容替换 URL 中找到的模糊词。
【问题讨论】:
【参考方案1】:a1
是一个 URI 对象,它没有 gsub
方法。您需要将其转换为字符串。试试这个
b = URI.parse(a1.to_s.gsub('fuzz','#line'))
【讨论】:
那么您的替换结果不是有效的 URI。 非常感谢,这工作正常,但是在得到这个之后,如何再次将此字符串转换为 URL 并执行与上面附加的代码 sn-p 相同的操作? Net::HTTP.start(target.host, target.port) 做 |http| request = Net::HTTP::Get.new target.request_uri response = http.request request puts response.body end 如果它是一个有效的 URI 字符串,请在其上调用URI.parse
。如果它不是一个有效的 URI 字符串,你期望什么结果?
如您所说,它现在可以正常工作了。但需要将所有这些存储在新文件中。我能够打印所有请求和响应,并在 URL 中替换文件内容。但是如何将其存储在新文件中?
使用File.write filename, content
以上是关于如何将在从控制台获取的 URL 中找到的特定字符串替换为在 Ruby 文本文件中写入的每一行中找到的文件内容?的主要内容,如果未能解决你的问题,请参考以下文章
如何在jQuery中的两个字符串之间获取url的特定部分[重复]