我有一个脚本正在获取各种ips的GeoIP位置,这是每天运行的,我希望大约有50,000个ips可以查找。

我已经设置了GeoIP系统 - 我只想消除每个报告运行wget 50,000次。

我在想的是,必须有某种方法让wget打开与url的连接 - 然后传递ips,这样就不必重新建立连接。

非常感谢任何帮助。

有帮助吗?

解决方案

如果您同时给 wget 多个地址,并且连续的地址属于同一个HTTP / 1.1( Connection:keep-alive )支持服务器, wget 将重新使用已建立的连接。

如果在命令行上列出的地址太多,您可以将它们写入文件并使用 -i / - input-file = 选项(根据UNIX传统, -i - / - input-file = - 读取标准输入。)

但是,无法在不同的 wget 调用之间保留连接。

其他提示

您还可以编写一个线程化的Ruby脚本,同时在多个输入文件上运行wget,以加快处理速度。因此,如果您有5个文件,每个文件包含10,000个地址,则可以使用此脚本:

#!/usr/bin/ruby

threads = []

for file in ARGV
  threads << Thread.new(file) do |filename|
    system("wget -i #{filename}")
  end
end

threads.each { |thrd| thrd.join }

这些线程中的每一个都将使用一个连接来下载文件中的所有地址。以下命令表示只有5个连接到服务器以下载所有50,000个文件。

./fetch.rb "list1.txt" "list2.txt" "list3.txt" "list4.txt" "list5.txt"

您还可以编写一个小程序(使用Java或C或其他)将文件列表作为POST请求发送,服务器返回一个包含有关它们的数据的对象。也不应该太慢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top