螺纹wget - 最小化资源

时间:2009-09-15 16:36:52

标签: shell wget

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

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

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

您还可以编写一个线程化的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"

答案 2 :(得分:0)

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