Maison > Java > javaDidacticiel > Pourquoi est-ce que j'obtiens une erreur 403 Forbidden avec mon programme de recherche Java Google, mais pas dans mon navigateur Web ?

Pourquoi est-ce que j'obtiens une erreur 403 Forbidden avec mon programme de recherche Java Google, mais pas dans mon navigateur Web ?

Mary-Kate Olsen
Libérer: 2024-12-21 09:17:10
original
156 Les gens l'ont consulté

Why Do I Get a 403 Forbidden Error with My Java Google Search Program, But Not in My Web Browser?

403 Interdit avec Java mais pas avec le navigateur Web : résoudre le problème de recherche Google

Malgré la récupération réussie des résultats de recherche dans les navigateurs Web, rencontrer une erreur 403 Forbidden lors d’une tentative de récupération de données de recherche Google à l’aide d’un programme Java peut être déroutante. La cause première réside dans l'absence d'informations sur l'agent utilisateur dans la requête Java.

Pour résoudre ce problème, il est nécessaire de simuler le comportement d'un navigateur Web en définissant l'en-tête "User-Agent" :

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();
Copier après la connexion

Cet en-tête demande au serveur de traiter la requête comme provenant d'un navigateur Web, ce qui évite l'erreur 403. Il convient de noter que la gestion SSL est gérée automatiquement.

Cependant, la récupération du montant du résultat à l'aide de Java nécessite des étapes supplémentaires. Il est nécessaire de récupérer le cookie et d'analyser le lien du jeton de redirection :

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>
Copier après la connexion

L'exécution de l'intégralité du bloc de code donne un résultat de 2930000000L, indiquant le nombre de résultats de recherche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal