如何将在从控制台获取的 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的特定部分[重复]

如何获取特定 URL 中音频文件的 ID3Tags 信息?

Flutter Firestore - 获取存储为字符串的 URL 时出现空安全错误

如何在 Web API 控制器中获取基本 URL?

在 Hive 中如何从特定字符开始获取结果

获取链接的最后一个字符串