웹 브라우저가 성공하는 동안 Java 프로그램에서 403 금지 오류 수신
문제:
Java 주어진 Google 검색어에 대한 결과 수를 검색하도록 설계된 프로그램은 403 Forbidden 오류가 발생하지만 동일한 쿼리는 웹 브라우저에서 결과를 생성합니다. 코드 조각:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; public class DataGetter { public static void main(String[] args) throws IOException { getResultAmount("test"); } private static int getResultAmount(String query) throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(new URL("https://www.google.com/search?q=" + query).openConnection() .getInputStream())); String line; String src = ""; while ((line = r.readLine()) != null) { src += line; } System.out.println(src); return 1; } }
오류:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.google.com/search?q=test at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) at DataGetter.getResultAmount(DataGetter.java:15) at DataGetter.main(DataGetter.java:10)
해결 방법:
이 문제는 Java의 URLConnection 클래스 때문에 발생합니다. 기본적으로 실제 사용자 에이전트를 위조하지 않습니다. 사용자 에이전트 헤더를 설정하도록 코드를 수정하면 이 문제가 해결됩니다.
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(); BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")));
또한 SSL 처리는 예외 스택 추적에 표시된 대로 투명합니다.
추가 고려 사항:
결과 개수를 검색하려면 쿠키를 가져와 브라우저를 속이는 등의 추가 단계가 필요합니다. 리디렉션 토큰 링크 구문 분석:
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의 결과가 나옵니다.
위 내용은 내 브라우저에서는 Google 검색 결과를 스크랩할 때 내 Java 프로그램에 403 금지 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!