現在、常に変化する変数に基づいて、Web サイトに接続し、情報を収集するプログラムを作成しています。最大 400 回 Web サイトに接続する必要があります。問題の Web サイトは、一定量 (約 10 ~ 30 回) の接続後に空白の画面を表示するようです。接続間の待機時間を見つける最良の方法を知っている人はいますか?
public static String pullString(int id) {
return null;
}
現在、常に変化する変数に基づいて、Web サイトに接続し、情報を収集するプログラムを作成しています。最大 400 回 Web サイトに接続する必要があります。問題の Web サイトは、一定量 (約 10 ~ 30 回) の接続後に空白の画面を表示するようです。接続間の待機時間を見つける最良の方法を知っている人はいますか?
public static String pullString(int id) {
return null;
}
仕事からは行けませんが、グーグルrunescape api
。彼らはここにそれを持っています、そして私は彼らがあなたがそれを使うことを期待しているに違いありません。
ブロックされ始めたら、最終的に再接続できますか? 何らかのアルゴリズムを実行して、再試行の速度を動的に見つけることができる場合があります。
TCP 輻輳制御と同様のことを考えることができます: 接続間の待機時間から始めます。1 つが正常に完了したら、待機時間を定数で減らします。エラーが発生した場合は、待機時間を 2 倍 (または定数倍) にします。
ただし、接続のレート制限だけでなく、さらに複雑なことを行っている可能性が非常に高いです。何を回避しなければならないかを知らなければ、それを回避する方法を知ることは困難です。
特定の制限に達した後、ウェブサイトがランダムなブロック時間を与えている場合、最適な待ち時間を見つけることはほとんど不可能です. あなたの最善の策は、http プロキシのプールを使用して、ラウンド ロビン方式で Web サイトにアクセスすることだと思います。それはあまり良いことではありませんが...しかし、技術的には、一定量のトラフィックの後にブロックされた場合、プログラムでWebサイトにアクセスするための最良の方法であるはずです.
プロキシの使用方法に関するリンクは次のとおりです。http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html
より単純な HttpClient を使用することもできます。
ぐぐってみると、無料のプロキシ サーバー リストがたくさん見つかります。