Skip to content

osvaldoacosta/HTTPServerNClient

Repository files navigation

HTTPStatus -> É o enum contendo os tipos de status http que usaremos, com seus codigos e suas mensagens.

HTTPServer -> É o server http propriamente dito

HTTPClient -> É o client que poderemos fazer requisições http nele, chamando assim o server, se assemelha ao telnet, porém recomendo ficar no postman para testar


Essa parte está tratando possiveis erros na requisiçao do client, e printado a primera linha da requisição que é no formato (METODO URI VERSAO_HTTP)

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));) {
String requestLine = in.readLine();

      if (requestLine == null) {
        sendResponse(HTTPStatus.BAD_REQUEST);
        return;
      }
      System.out.println(requestLine);
      String[] requestParts = requestLine.split(" ");

      if (requestParts.length < 3) {
        sendResponse(HTTPStatus.BAD_REQUEST);
        return;
      }

      String requestHttpMethod = requestParts[0]; // Extraindo o metodo http
      String uri = requestParts[1]; // Extraindo a URI
      String httpVersion = requestParts[2]; // Extraindo a versao http da requisicao do cliente

      System.out.println("Metodo: " + requestHttpMethod + "\nURI: " + uri + "\nVersao HTTP: " + httpVersion);

Aqui está retornando com not found se o URI(endpoint) não for válido

if(!uri.equals("/pessoa")){
sendResponse(HTTPStatus.NOT_FOUND);
return;
}

Aqui nós estamos separando o body do header

StringBuilder bodyData = new StringBuilder();
String line;
StringBuilder headerData= new StringBuilder();

      //Le e armazena os headers
      while ((line = in.readLine()) != null && !line.isEmpty()) {
        headerData.append(line).append("\r\n");
      }

      // Lê e armazena o body da requisicao
      while (in.ready()) {
        bodyData.append((char) in.read());
      }

      System.out.println("Headers:\n" + headerData);
      System.err.println("Body:\n" + bodyData);

Esse método ainda requer construçao, porém ele é o responsável em criar o corpo da resposta http para o client, caso o status fosse no content, geraria um erro, portanto o if

private void sendResponse(HTTPStatus status) throws IOException {

    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
    StringBuilder jsonResponse = new StringBuilder();

    jsonResponse.append("HTTP/1.1 " + status.getStatusCode() + " " + status.getReasonText() + "\r\n");
    jsonResponse.append("Date: " + new java.util.Date() + "\r\n");
    jsonResponse.append("Host : localhost\r\n");
    jsonResponse.append("Content-Type: application/json\r\n");
    jsonResponse.append("Connection: keep-alive\r\n"); // HTTP 1.1
    jsonResponse.append("\r\n");
    if(!status.equals(HTTPStatus.NO_CONTENT))
      jsonResponse.append("{ \""+mensagem+"\" : \"Admirador secreto de tarciana!\"}");


    out.write(jsonResponse.toString());
    out.flush();
}
}

About

Servidor e cliente http simples usando server socket

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages