ホームページ >Java >&#&チュートリアル >Java Google 検索プログラムでは 403 Forbidden エラーが発生するのに、Web ブラウザでは発生しないのはなぜですか?
403 Java では禁止されているが Web ブラウザでは禁止: Google 検索の問題を解決する
Web ブラウザで検索結果を正常に取得したにもかかわらず、 Java プログラムを使用して Google 検索データを取得しようとすると、403 Forbidden エラーが発生する可能性があります。不可解だ。根本的な原因は、Java リクエストにユーザー エージェント情報が存在しないことにあります。
この問題を解決するには、「User-Agent」ヘッダーを設定して Web ブラウザの動作をシミュレートする必要があります。
URLConnection connection = new URL("https://www.google.com/search?q=" + query).openConnection(); connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); connection.connect();
このヘッダーは、リクエストを Web ブラウザから送信されたものとして扱うようにサーバーに指示し、403 エラーを防ぎます。 SSL 処理は自動的に処理されることに注意してください。
ただし、Java を使用して結果の量を取得するには、さらなる手順が必要です。 Cookie を取得し、リダイレクト トークン リンクを解析する必要があります:
String cookie = connection.getHeaderField("Set-Cookie").split(";")[0]; Pattern pattern = Pattern.compile("content=\\"0;url=(.*?)\\""); Matcher m = pattern.matcher(response); if (m.find()) { String url = m.group(1); connection = new URL(url).openConnection(); connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); connection.setRequestProperty("Cookie", cookie); connection.connect(); r = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8"))); sb = new StringBuilder(); while ((line = r.readLine()) != null) { sb.append(line); } response = sb.toString(); pattern = Pattern.compile("<div>
コード ブロック全体を実行すると、検索結果の数を示す 2930000000L の結果が得られます。
以上がJava Google 検索プログラムでは 403 Forbidden エラーが発生するのに、Web ブラウザでは発生しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。