Java httpserver se bloque lors de la réception des requêtes POST
Je suis en train d'écrire un simple serveur HTTP en Java qui peut traiter les requêtes POST. Alors que mon serveur reçoit correctement les OBTENIR, il s'écrase sur le POTEAU.
Ici est le serveur
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();
}
}
}
Et voici le code Java-je utiliser pour envoyer le 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());
}
Chaque fois que la requête POST se bloque sur cette ligne
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
mais quand je change l'URL à celui fourni dans l'exemple où j'ai trouvé ce qu'il fonctionne.
Et quel est le message d'erreur sur le crash? Je soupçonne que le problème, c'est que vous n'êtes pas de la connexion en HTTPS, mais vous êtes casting pour
oui je crois que c'est ici l'erreur d'Exception dans le thread "main" java.lang.ClassCastException: le soleil.net.www.le protocole.http.HttpURLConnection ne peut pas être lancé à javax.net.le protocole ssl.HttpsURLConnection
si je change HTTPS, il ne plante plus, mais la demande se bloque indéfiniment, des suggestions?
Oui, lire le flux d'entrée dans votre serveur. Votre demande est en train d'essayer d'écrire, mais il n'y a personne sur l'autre extrémité qui les lit.
HttpsURLConnection
.oui je crois que c'est ici l'erreur d'Exception dans le thread "main" java.lang.ClassCastException: le soleil.net.www.le protocole.http.HttpURLConnection ne peut pas être lancé à javax.net.le protocole ssl.HttpsURLConnection
si je change HTTPS, il ne plante plus, mais la demande se bloque indéfiniment, des suggestions?
Oui, lire le flux d'entrée dans votre serveur. Votre demande est en train d'essayer d'écrire, mais il n'y a personne sur l'autre extrémité qui les lit.
OriginalL'auteur Alex Brashear | 2015-02-04
Vous devez vous connecter pour publier un commentaire.
Au lieu de
Utilisation
Vous vous connectez à une URL qui n'est pas en HTTPS. Lorsque vous appelez
obj.openConnection()
, il décide si la connexion HTTP ou HTTPS, et retourne l'objet approprié. Quand il esthttp
, il ne renvoie pas uneHttpsURLConnection
, de sorte que vous ne pouvez pas convertir.Cependant, depuis
HttpsURLconnection
s'étendHttpURLConnection
, à l'aide deHttpURLConnection
de travail pour les deuxhttp
ethttps
Url. Les méthodes que vous appelez dans votre code existent int laHttpURLConnection
classe.OriginalL'auteur RealSkeptic