1

我有一个脚本可以获取各种 ips 的 GeoIP 位置,它每天运行,我预计大约有 50,000 个 ips 可以查找。

我设置了一个 GeoIP 系统——我只是想消除每个报告运行 wget 50,000 次的麻烦。

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

任何帮助都感激不尽。

4

3 回答 3

2

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

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

但是,没有办法在不同的wget调用之间保持连接。

于 2009-09-15T17:46:29.867 回答
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"
于 2009-09-15T18:53:56.643 回答
0

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

于 2010-06-28T12:40:04.453 回答