Heim > Java > javaLernprogramm > Warum erhält mein Java-Programm beim Scraping von Google-Suchergebnissen den Fehler 403 Forbidden, während mein Browser dies nicht tut?

Warum erhält mein Java-Programm beim Scraping von Google-Suchergebnissen den Fehler 403 Forbidden, während mein Browser dies nicht tut?

DDD
Freigeben: 2024-12-11 19:33:11
Original
499 Leute haben es durchsucht

Why Does My Java Program Get a 403 Forbidden Error When Scraping Google Search Results While My Browser Doesn't?

Java-Programm empfängt 403 Forbidden Error, während Webbrowser erfolgreich sind

Problem:

Ein Java Ein Programm zum Abrufen der Ergebnisanzahl für eine bestimmte Google-Suchanfrage gibt bei derselben Abfrage den Fehler 403 Forbidden zurück liefert Ergebnisse in Webbrowsern. Codeausschnitt:

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;
    }

}
Nach dem Login kopieren

Fehler:

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)
Nach dem Login kopieren

Lösung:

Das Problem tritt aufgrund der URLConnection-Klasse von Java auf täuscht standardmäßig keinen tatsächlichen Benutzeragenten vor. Durch Ändern des Codes zum Festlegen eines User-Agent-Headers wird dieses Problem behoben:

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")));
Nach dem Login kopieren

Außerdem ist die SSL-Verarbeitung transparent, wie durch den Ausnahme-Stacktrace angezeigt.

Weitere Überlegungen:

Das Abrufen der Ergebniszahlen erfordert weitere Schritte, einschließlich der Fälschung eines Browsers durch das Abrufen von Cookies und das Parsen der Weiterleitung Token-Links:

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>
Nach dem Login kopieren

Die Ausführung dieses vollständigen Codes ergibt ein Ergebnis von 2930000000L.

Das obige ist der detaillierte Inhalt vonWarum erhält mein Java-Programm beim Scraping von Google-Suchergebnissen den Fehler 403 Forbidden, während mein Browser dies nicht tut?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage