Estoy tratando de escribir un simple servidor HTTP en Java que puede manejar las peticiones POST. Mientras mi servidor recibe correctamente la CONSIGUE, se estrella en el POSTE.

Aquí es el servidor

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();
        }
    }
}

Y aquí está el código de Java debo usar para enviar el 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());
}

Cada vez que la solicitud POST se bloquea en esta línea

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

pero cuando voy a cambiar la URL a la que se proporciona en el ejemplo donde he encontrado esto funciona.

Y ¿cuál es el mensaje de error en el accidente? Yo sospecho que el problema es que no se conecta en HTTPS, pero usted está lanzando a HttpsURLConnection.
sí creo que es así, aquí está el error de Excepción en el thread «main» java.lang.ClassCastException: sol.net.www.protocolo.http.HttpURLConnection no se puede convertir a javax.net.ssl.HttpsURLConnection
si lo cambio a HTTPS ya no se bloquea, pero la petición se bloquea indefinidamente, alguna sugerencia?
Sí, leer la secuencia de entrada en el servidor. Su solicitud está tratando de escribir, pero no hay nadie en el otro extremo que se lee.

OriginalEl autor Alex Brashear | 2015-02-04

1 Comentario

  1. 4

    Lugar de

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

    Uso

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

    Se conecta a una URL que no es HTTPS. Cuando llame obj.openConnection(), decide si la conexión es HTTP o HTTPS, y devuelve el objeto apropiado. Cuando http, no devolver un HttpsURLConnection, por lo que no se puede convertir.

    Sin embargo, desde HttpsURLconnection se extiende HttpURLConnection, utilizando HttpURLConnection de trabajo para ambos http y https Url. Los métodos que usted llama en su código de todos los que existen int HttpURLConnection clase.

    que se fija, un millón de gracias!

    OriginalEl autor RealSkeptic

Dejar respuesta

Please enter your comment!
Please enter your name here