Maison  >  Article  >  Java  >  Exemple d'analyse du robot d'exploration Java

Exemple d'analyse du robot d'exploration Java

黄舟
黄舟original
2017-09-16 10:48:591835parcourir

Tout d'abord, après avoir lu cet article, cela ne garantit pas que vous deviendrez un maître, mais cela peut vous aider à comprendre ce qu'est un robot, comment utiliser un robot et comment utiliser le protocole http pour envahir d'autres Les systèmes des gens. Bien sûr, ce ne sont que quelques tutoriels simples. Obtenez-le Quelques données simples

Commençons par le code et expliquons-le étape par étape :

Ceci est une classe d'outils pour vous. pas besoin de regarder en détail. Vous pouvez trouver des classes d'outils pour envoyer des requêtes http partout sur Internet. Il existe peu de packages Guidez-le vous-même

package com.df.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.jsoup.Connection;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import com.df.controller.DFContorller;
public class HttpPosts {
    private final static Logger logger = Logger.getLogger(DFContorller.class);
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(),"utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            logger.info("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }  
    
    
      public static String sendGet(String url, String param) {
            String result = "";
            BufferedReader in = null;
            try {
                String urlNameString = url + "?" + param;
                URL realUrl = new URL(urlNameString);
                // 打开和URL之间的连接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的请求属性
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                connection.setRequestProperty("Cookie","PHPSESSID=27roc4d0ccd2cg4jbht80k8km2");
                // 建立实际的连接
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.out.println(key + "--->" + map.get(key));
                }
                // 定义 BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(
                        connection.getInputStream(),"utf-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送GET请求出现异常!" + e);
                e.printStackTrace();
            }
            // 使用finally块来关闭输入流
            finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            return result;
       }       
}

----------. ----------------------------------- Ligne de démarcation

Allons See More entrez le sujet : Tout d'abord, vous devez entrer, vous devez explorer la page de connexion du site Web, afficher le code source de la page et trouver le nom de la méthode pour envoyer la demande de connexion. Généralement, les petits sites Web seront écrits directement dans le champ de recherche ; action de surface, qui est facile à trouver. Les sites Web de taille moyenne ne seront pas écrits aussi directement. Il faudra un certain effort pour le trouver. Il peut être en js ou non sur cette page. à l'outil une fois et voyez les informations de demande capturées. Il s'agit d'un grand site Web. J'ai exploré le backend de JD.com. J'ai utilisé le f12 fourni avec le navigateur. Je n'arrive pas à obtenir les informations de connexion. . Enfin, j'ai réfléchi à de nombreuses astuces. Obtenez l'interface de connexion de Jingdong ; implémentez l'exploration ; après avoir obtenu l'adresse de l'interface de connexion ; téléchargez le code

String data=HttpPosts.sendGet (adresse de connexion (sans paramètres ; type de chaîne). adresse), paramètres (tels que : user_id =6853&export=112)); (Le statut de connexion renvoyé est généralement au format json. Il comptera si vous vous êtes connecté avec succès, certains sont vrais, certains sont 1, selon la situation) Choisissez get ou post pour imiter la demande de la page de connexion

Ensuite, faites une autre demande pour obtenir le cookie

Connection conn = Jsoup.connect("登录后页面的地址");  
          conn.method(Method.GET);  
          conn.followRedirects(false);  
          Response response = conn.execute();  
          System.out.println(response.cookies());

Parlons du cookie transmis dynamiquement dans la méthode get ou post et remplacé le cookie codé en dur ; car il s'agit d'un test, le cookie est codé en dur et peut être écrit dynamiquement ;

Après cela, si vous souhaitez visiter la page après connexion, la page d'accueil, ou les données page, elle doit contenir des cookies et des informations sur les paramètres de base de la requête http, sinon elle sera définitivement interceptée.

String data=HttpPosts.sendGet(adresse de connexion (sans paramètres ; adresse de type chaîne), paramètres (tels que : user_id=6853&export=112)); vous cette fois est la leur Page, si vous trouvez une interface de données du côté opposé, vous pouvez y accéder directement, et les données seront renvoyées directement, sinon vous devrez analyser sa page, ce qui est très gênant. Jsoup est généralement utilisé pour analyser les pages.

En fait, il s'agit d'un autre type d'intrusion. Vous n'avez pas besoin de connaître le document d'interface de l'autre partie. Vous pouvez utiliser un programme pour accéder directement au serveur de l'autre partie en utilisant le protocole http.

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!

Déclaration:
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