Java Language Exemple de socket - lecture d'une page Web à l'aide d'un socket simple


Exemple

import java.io.*;
import java.net.Socket;

public class Main {

    public static void main(String[] args) throws IOException {//We don't handle Exceptions in this example 
        //Open a socket to stackoverflow.com, port 80
        Socket socket = new Socket("stackoverflow.com",80);

        //Prepare input, output stream before sending request
        OutputStream outStream = socket.getOutputStream();
        InputStream inStream = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
        PrintWriter writer = new PrintWriter(new BufferedOutputStream(outStream));

        //Send a basic HTTP header
        writer.print("GET / HTTP/1.1\nHost:stackoverflow.com\n\n");
        writer.flush();

        //Read the response
        System.out.println(readFully(reader));

        //Close the socket
        socket.close();
    }
    
    private static String readFully(Reader in) {
        StringBuilder sb = new StringBuilder();
        int BUFFER_SIZE=1024;
        char[] buffer = new char[BUFFER_SIZE]; // or some other size, 
        int charsRead = 0;
        while ( (charsRead  = rd.read(buffer, 0, BUFFER_SIZE)) != -1) {
          sb.append(buffer, 0, charsRead);
        }
    }
}

Vous devriez obtenir une réponse commençant par HTTP/1.1 200 OK , qui indique une réponse HTTP normale, suivie du reste de l'en-tête HTTP, suivie de la page Web brute au format HTML.

Notez que la méthode readFully() est importante pour éviter une exception EOF prématurée. La dernière ligne de la page Web manque peut-être un retour, pour signaler la fin de la ligne, alors readLine() se plaindra, donc il faut le lire à la main ou utiliser des méthodes utilitaires d' Apache commons-io IOUtils

Cet exemple se veut une simple démonstration de connexion à une ressource existante à l'aide d'un socket, ce n'est pas un moyen pratique d'accéder aux pages Web. Si vous devez accéder à une page Web à l'aide de Java, il est préférable d'utiliser une bibliothèque de clients HTTP existante, telle que le client HTTP d'Apache ou le client HTTP de Google.