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 ?
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();
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>
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!