Рубрики
Без рубрики

Ява – Проверьте, является ли веб-запрос от искателя Google

– Java – Проверьте, является ли веб-запрос от искателя Google

Если веб-запрос поступает от искателя Google или бота Google, запрошенный “агент пользователя” должен выглядеть примерно так:

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
or
(rarely used): Googlebot/2.1 (+http://www.google.com/bot.html)

Источник: Поисковые роботы Google

1. Пример Java

В Java вы можете получить “агент пользователя” из Запрос HttpServletRequest .

	@Autowired
	private HttpServletRequest request;

	//...
	String userAgent =  request.getHeader("user-agent");
		
	System.out.println("User Agent : " + userAgent);
		
	if(!StringUtils.isEmpty(userAgent)){
		if(userAgent.toLowerCase().contains("googlebot")){
			System.out.println("This is Google bot");
		}else{
			System.out.println("Not from Google");
		}
	
	}

2. Поддельный Агент Пользователя

Легко создать поддельный/поддельный запрос агента пользователя. Например:

package com.mkyong.web;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;

public class test {

	public static void main(String[] args) throws Exception {

		HttpClient client = HttpClientBuilder.create().build();
		HttpGet request = new HttpGet("abcdefg.com");
		request.setHeader("user-agent", "fake googlebot");
		HttpResponse response = client.execute(request);

	}

}

Выход на abcdefg.com .

User Agent : fake googlebot

This is Google bot

3. Проверка Googlebot

Чтобы проверить настоящий робот Googlebot, вы можете использовать “обратный поиск DNS” вручную, как это:

> host 66.249.66.1
1.66.249.66.in-addr.arpa domain name pointer 
crawl-66-249-66-1.googlebot.com.

> host crawl-66-249-66-1.googlebot.com
crawl-66-249-66-1.googlebot.com has address 66.249.66.1

Источник: Проверка Googlebot

4. Проверка Googlebot – Пример Java

Основываясь на приведенной выше теории, мы можем смоделировать 1-ю часть “обратного поиска DNS”. Используйте команду host , чтобы определить, куда указывает запрошенный IP-адрес.

Если запрос поступает от Googlebot, он отобразит следующий шаблон: xx*.googlebot.com . .

P.S хозяин команда доступна только в системе *nix.

	@Autowired
	private HttpServletRequest request;

	//...
	String requestIp = getRequestIp();
	String userAgent = request.getHeader("user-agent");
		
	System.out.println("User Agent : " + userAgent);
		
	if(!StringUtils.isEmpty(userAgent)){
		
		if(userAgent.toLowerCase().contains("googlebot")){
				
			//check fake user agent
			String output = executeCommand("host " + requestIp);
			System.out.println("Output : " + output);
				
			if(output.toLowerCase().contains("googlebot.com")){
				System.out.println("This is Google bot");
			}else{
				System.out.println("This is fake user agent");
			}
				
		}else{
			System.out.println("Not from Google");
		}
	}
		
	//get requested IP
	private String getRequestIp() {
		String ipAddress = request.getHeader("X-FORWARDED-FOR");
		if (ipAddress == null) {
			ipAddress = request.getRemoteAddr();
		}
		return ipAddress;
	}

	// execute external command
	private String executeCommand(String command) {

		StringBuffer output = new StringBuffer();

		Process p;
		try {
			p = Runtime.getRuntime().exec(command);
			p.waitFor();
			BufferedReader reader = 
				new BufferedReader(new InputStreamReader(p.getInputStream()));

			String line = "";			
			while ((line = reader.readLine())!= null) {
				output.append(line + "\n");
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return output.toString();

	}

Попробуйте еще раз пример поддельного агента пользователя “шаг 2”. Теперь вы получите этот вывод:

Output : Host 142.1.168.192.in-addr.arpa. not found: 3(NXDOMAIN) //this output may vary.

User Agent : fake googlebot
This is fake user agent

Если у вас есть лучшее решение, поделитесь ниже, спасибо.

Рекомендации

  1. Проверка Googlebot
  2. Поисковые роботы Google/a>
  3. Выполнить команду оболочки из Java

Оригинал: “https://mkyong.com/java/java-check-if-web-request-is-from-google-crawler/”