無料プロキシの選択と理解
無料プロキシのデジタル迷宮はチェス盤のように展開します。それぞれの駒(プロキシ)には独自の戦略、強み、そして避けられない脆弱性があります。Javaアプリケーションにプロキシを統合する前に、顔の見えないプレイヤーを区別する必要があります。
プロキシタイプ | 説明 | 匿名 | スピード | 信頼性 |
---|---|---|---|---|
ウェブ | HTTPトラフィックのみ処理します | 低中 | 速い | 低い |
翻訳 | 暗号化されたHTTP(S)をサポート | 中高 | メッド | 低い |
SOCKS4/5 | プロトコルに依存せず、多用途 | 高い | メッド | メッド |
透明 | IPアドレスの公開、基本的なフィルタリング | なし | 速い | 低い |
エリート(高) | IPアドレスとプロキシの事実の両方を隠します | 高い | メッド | 低中 |
注意:無料プロキシは一時的なもので、インターネットの気まぐれな変動の影響を受けやすいため、ご利用前に必ず利用可能かどうかをご確認ください。
無料プロキシの収集
購入手続きはシンプルですが、確かな目利きが必要です。信頼できるアグリゲーターには以下のようなものがあります。
- https://free-proxy-list.net/
- https://www.sslproxies.org/
- https://www.proxy-list.download/
通常、プロキシは次のように提供されます。
IP:ポート 例: 51.158.68.68:8811
HTTPS および SOCKS プロキシの場合は、追加のプロトコル インジケーターを探します。
HTTP/HTTPSプロキシ用のJavaの設定
JDKは、その洗練された静寂性により、システムプロパティ経由でプロキシ設定を可能にします。コマンドライン呼び出し、またはコード内宣言など、お好みの方法で設定してください。
コマンドライン経由:
java -Dhttp.proxyHost=51.158.68.68 -Dhttp.proxyPort=8811 -Dhttps.proxyHost=51.158.68.68 -Dhttps.proxyPort=8811 -jar myapp.jar
コード内構成:
System.setProperty("http.proxyHost", "51.158.68.68"); System.setProperty("http.proxyPort", "8811"); System.setProperty("https.proxyHost", "51.158.68.68"); System.setProperty("https.proxyPort", "8811");
これは JVM に「すべての HTTP および HTTPS 送信要求はこの監視装置を通過する必要があります」とささやきます。
きめ細かなプロキシの使用 java.net
外科手術のような精度、つまりリクエストごとのプロキシを求める人のために、Javaの プロキシ
クラスではメスを提供します。
java.net.* をインポートします。プロキシ proxy = new Proxy(Proxy.Type.HTTP、new InetSocketAddress("51.158.68.68", 8811)); URL url = new URL("http://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
HTTPSの場合は、 HttpsURL接続
構造は変更されていません。プロトコルだけが異なります。
SOCKS5プロキシ設定
アナーキストや秘密トンネルの設計者に愛用されている SOCKS プロトコルも同様に構成されています。
コマンドライン:
java -DsocksProxyHost=51.158.68.68 -DsocksProxyPort=8811 -jar myapp.jar
Java の場合:
System.setProperty("socksProxyHost", "51.158.68.68"); System.setProperty("socksProxyPort", "8811");
接続ごと:
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("51.158.68.68", 8811)); Socket socket = new Socket(proxy); // 下位レベルのAPIで使用 // または上記のURL接続で使用
ユーザー名とパスワードによる認証
ゲートキーパーが認証情報を要求すると、Javaの 認証子
クラスの弓が使用中:
Authenticator.setDefault(new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username", "password".toCharArray()); } });
ネットワーク呼び出しの前にこれを呼び出します。HTTP/HTTPSとSOCKSプロキシの両方とシームレスに統合されます。
ローテーションプロキシ:難読化のダンス
禁止やレート制限を回避するには、プロキシを循環させます。これは一時的な接続のバレエです。
リストproxies = Arrays.asList( new Proxy(Proxy.Type.HTTP, new InetSocketAddress("1.1.1.1", 8080)), new Proxy(Proxy.Type.HTTP, new InetSocketAddress("2.2.2.2", 8080)) ); for (Proxy proxy : proxies) { URL url = new URL("http://target.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); // 応答を処理... }
より洗練されたものを求める場合は、ランダムまたは重み付け選択アルゴリズム、あるいは以下のようなライブラリを検討してください。 リトルプロキシ 動的プロキシ管理用。
タイムアウトと失敗の処理
無料プロキシはパリの天気と同じくらい信頼性が低いので、突然の雨に備えましょう。タイムアウトを設定してコードを保護しましょう。
conn.setConnectTimeout(5000); // 5秒 conn.setReadTimeout(5000);
再試行を実装し、データを信頼する前に必ずプロキシを検証してください。
プログラムによるプロキシの匿名性と速度のテスト
代理人の脈拍を測定します。代理人は生きているか、素早いか、慎重か?
long start = System.currentTimeMillis(); HttpURLConnection conn = (HttpURLConnection) new URL("http://api.ipify.org").openConnection(proxy); conn.setConnectTimeout(3000); conn.setReadTimeout(3000); if (conn.getResponseCode() == 200) { long elapsed = System.currentTimeMillis() - start; String externalIp = new BufferedReader(new InputStreamReader(conn.getInputStream())) .readLine(); System.out.println("プロキシは稼働中です。 IP: " + externalIp + " 待機時間: " + elapsed + "ms"); }
外部 IP を自分の IP と相互参照します。一致した場合、匿名性は単なる幻想です。
ベストプラクティス:無料プロキシの渦中を乗り切る
練習する | 根拠 |
---|---|
プロキシを検証する | 多くは数時間以内に死亡します。チェックを自動化します。 |
HTTPS/SOCKSを使用する | プライバシー保護のため、可能な場合は透過的/HTTP を避けてください。 |
定期的に回転する | 禁止を緩和し、負荷を分散します。 |
タイムアウトを設定する | デッドプロキシに固執することは避けてください。 |
機密データを制限する | 無料のプロキシはトラフィックを記録する可能性がありますが、パスワードは送信しません。 |
robots.txtに従う | 倫理的なスクレイピングを尊重し、法的な争いを回避します。 |
プロキシ処理を強化するための主要Javaライブラリ
図書館 | 目的 | Mavenアーティファクト |
---|---|---|
OKHttp | 最新の HTTP クライアント、簡単なプロキシの使用 | com.squareup.okhttp3:okhttp |
Apache HTTP クライアント | 豊富なHTTP機能、プロキシサポート | org.apache.httpcomponents:httpクライアント |
リトルプロキシ | プロキシサーバー、チェーン、ローテーション | org.littleshoot:littleproxy |
OkHttpの例:
OkHttpClient client = new OkHttpClient.Builder() .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("51.158.68.68", 8811))) .build(); リクエスト request = new Request.Builder().url("https://httpbin.org/ip").build(); レスポンス response = client.newCall(request).execute(); System.out.println(response.body().string());
一般的な問題のトラブルシューティング
症状 | 考えられる原因 | 救済策 |
---|---|---|
java.net.ConnectException |
プロキシがデッド/アクセス不能 | 別のプロキシを試す |
java.net.SocketTimeout |
プロキシまたはネットワークが遅い | タイムアウトを増やし、プロキシをローテーションする |
403/429の応答 | IPが禁止またはレート制限されている | プロキシをローテーションし、遅延を追加する |
明らかな効果なし | プロキシが設定されていない、正しく構成されていない、または無視されている | プロキシ設定を再確認する |
SSLハンドシェイクエラー | プロキシはHTTPSをサポートしていません | プロキシの種類を確認し、HTTP を使用します |
サンプルワークフロー: Java Webスクレイパーへのプロキシの統合
- 新しいプロキシリストを取得する
- 各プロキシを検証する(接続、外部 IP の確認)
- プロキシローテーションメカニズムを構築する
- タイムアウトと再試行を構成する
- ローテーションプロキシを使用してターゲット URL をスクレイピングする
- 障害をログに記録し、無効なプロキシを禁止し、定期的にリストを更新します
結局のところ、Java のフリー プロキシを使ったダンスは芸術であり科学でもあります。自動化と警戒のパ・ド・ドゥであり、すべてのリクエストがデータ バレエの足音であり、各プロキシが Web の仮面舞踏会におけるつかの間の仮面なのです。
コメント (0)
まだコメントはありません。あなたが最初のコメントを投稿できます!