Maison Java javaDidacticiel Exemple d'analyse du robot d'exploration Java

Exemple d'analyse du robot d'exploration Java

Sep 16, 2017 am 10:48 AM
java 实例分析 爬虫

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

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

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

See all articles