Comment puis-je envoyer une requête POST en Java?
Quand j'ai envoyer la demande à partir de JSP-je utiliser ce code
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="http://translate.intelsoft.az" id="tform" name="ftext">
<input class="gogo1" value="a" name="l" id="l1" /> <div class="il">
<p>Rusca</p>
<textarea class="ilkin1" name="t" id="t1" >
выыававыавыавыавфыа
выыававыавыавыавфыа
выыававыавыавыавфыа
выыававыавыавыавфыа</textarea>
<div><input class="gogo" type="submit" value="Tərcümə1" name="b1" /></div></div> </form>
</body>
</html>
et la réponse est correcte, de sorte que je vois ma valeur du paramètre. Mais quand j'envoie à partir de Java je n'ai pas de réponse correcte. Je pense que les paramètres ne sont pas transmis correctement. Voici mon code Java:
String urlParameters = "t=выыававыавыавыавфыа&l=a";
String request = "http://translate.intelsoft.az";
URL url = null;
try {
url = new URL(request);
} catch (MalformedURLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
HttpURLConnection connection = null;
try {
connection = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
try {
connection.setRequestMethod("POST");
} catch (ProtocolException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
connection.setRequestProperty("Content-Type", "text/html");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
connection.setUseCaches (false);
DataOutputStream wr;
try {
wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(urlParameters);
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
wr.close();
connection.disconnect();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
Quel est le problème ici?
- Vous pouvez utiliser une bibliothèque comme apache commons httpclient, ou encore Apache CXF de JAX-RS client, pour vous épargner beaucoup de ce système de choses.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, votre page JSP est l'utilisation de l'UTF-8 de codage de caractères.
Cependant, votre code Java n'utilise pas le même encodage des caractères.
Vous avez besoin de la remplacer gênants pièce par
Noter que l'ensemble de la
DataOutputStream
la décoration est inutile. Il sert un tout autre but (celui de l'écriture de.dat
type de fichiers). N'oubliez pas de spécifier le même jeu de caractères dans la manière dont vous avez configuré votreContent-Length
en-tête.Seconde, les noms/valeurs de paramètres eux-mêmes devraient être URL-encodé pour être extraites correctement le formulaire de la requête HTTP.
Troisième, vos en-têtes de requête sont en fait aussi mal:
Vous n'êtes pas d'envoi
text/html
de données. Vous envoyezapplication/x-www-form-urlencoded
de données. Aussi, quecharset
doit avoir été un attribut de laContent-Type
en-tête, donc:Voir aussi:
Content-Type
aussi). Consultez la mise à jour de la réponse (et le "Voir aussi" le lien, c'est tout à celle-ci).b1=Tərcümə1
.