Java httpserver si blocca dopo la ricezione di richieste POST

Sto cercando di scrivere un semplice server HTTP in Java in grado di gestire le richieste POST. Mentre il mio server riceve correttamente il, si schianta sul palo.

Qui è il server

public class RequestHandler {
    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
        server.createContext("/requests", new MyHandler());
        server.setExecutor(null); //creates a default executor
        server.start();
    }

    static class MyHandler implements HttpHandler {
        public void handle(HttpExchange t) throws IOException {
            String response = "hello world";
            t.sendResponseHeaders(200, response.length());
            System.out.println(response);
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    }
}

E qui è il codice Java che uso per inviare i POST

//HTTP POST request
private void sendPost() throws Exception {

    String url = "http://localhost:8080/requests";
    URL obj = new URL(url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    //add reuqest header
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", USER_AGENT);
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

    String urlParameters = "sn=C02G8416DRJM&cn=&locale=&caller=&num=12345";

    //Send post request
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + urlParameters);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());
}

Ogni volta che il POST di richiesta si blocca su questa linea

HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

ma quando cambio l’URL con quello fornito nell’esempio in cui ho trovato questo funziona.

  • E qual è il messaggio di errore sul crash? Ho il sospetto che il problema è che non si connette in HTTPS, ma si stanno gettando a HttpsURLConnection.
  • sì credo di sì, qui è l’errore di Exception in thread “main” java.lang.ClassCastException: sole.net.www.il protocollo.http.HttpURLConnection non può essere gettato javax.net.ssl.HttpsURLConnection
  • se cambio è per HTTPS non si blocca più, ma la richiesta si blocca a tempo indeterminato, qualche suggerimento?
  • Sì, leggere l’input stream nel vostro server. La tua richiesta è provare a scrivere, ma non c’è nessuno dall’altra parte che lo legge.

 

One Reply
  1. 4

    Invece di

    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    Utilizzare

    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    Collegamento a un URL che non è HTTPS. Quando si chiama obj.openConnection(), decide se la connessione HTTP o HTTPS, e restituisce l’oggetto appropriato. Quando è http, non restituire un HttpsURLConnection, quindi non è possibile la conversione ad esso.

    Tuttavia, poiché HttpsURLconnection si estende HttpURLConnection, utilizzando HttpURLConnection lavora sia in http e https Url. I metodi che si sta chiamando nel codice esiste int il HttpURLConnection classe.

    • che fissa, grazie una tonnellata!

Lascia un commento