문제

다양한 IPS의 GEOIP 위치를 얻는 스크립트가 있습니다. 이것은 매일 실행되며 약 50,000 IP를 찾아 볼 것으로 예상됩니다.

GEOIP 시스템이 설정되어 있습니다. 보고서 당 50,000 번 WGET를 실행 해야하는 것을 제거하고 싶습니다.

내가 생각했던 것은 WGET가 URL과 연결을 열 수있는 방법이 있어야한다는 것입니다. 그런 다음 IPS를 통과시켜 연결을 다시 설정할 필요가 없습니다.

모든 도움은 대단히 감사하겠습니다.

도움이 되었습니까?

해결책

당신이 주면 wget 동일한 HTTP/1.1에 속하는 연속 주소가있는 여러 주소 (Connection: keep-alive) 지원 서버, wget 이미 설립 된 연결을 재사용합니다.

명령 줄에 목록에 주소가 너무 많으면 파일에 작성하여 -i/--input-file= 옵션 (및 유닉스 전통에 따라 -i-/--input-file=- 표준 입력을 읽습니다).

그러나 다른 사람들의 연결을 보존 할 방법이 없습니다. wget 호출.

다른 팁

또한 스레드 루비 스크립트를 작성하여 여러 입력 파일에서 동시에 WGET를 실행하여 프로세스 속도를 높일 수도 있습니다. 따라서 각각 10,000 개의 주소가 포함 된 5 개의 파일이있는 경우이 스크립트를 사용할 수 있습니다.

#!/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 개의 연결만으로 5 만 파일을 모두 다운로드합니다.

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

또한 파일 목록을 게시물 요청으로 보내는 작은 프로그램 (Java 또는 C 또는 무엇이든)을 작성할 수도 있고 서버는 이에 대한 데이터와 함께 객체를 반환 할 수 있습니다. 너무 느리지 않아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top