我有一个脚本正在获取各种ips的GeoIP位置,这是每天运行的,我希望大约有50,000个ips可以查找。
我已经设置了GeoIP系统 - 我只想消除每个报告运行wget 50,000次。
我在想的是,必须有某种方法让wget打开与url的连接 - 然后传递ips,这样就不必重新建立连接。
非常感谢任何帮助。
答案 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请求发送,服务器返回一个包含有关它们数据的对象。也不应该太慢。