Olá a todos…
Pessoal estou tentando enviar um POST para outra aplicação mas estou recebendo o seguinte erro:
java.io.IOException: Server returned HTTP response code: 400 for URL: https://148.91.92.44:443/TPIS-VALEACCENTURE-Incident
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1149)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
at lerxml.ConectaUrl05.main(ConectaUrl05.java:67)
Meu Código:
package lerxml;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
public class ConectaUrl05 {
public ConectaUrl05() {
}
public static void main(String[] args) {
ConectaUrl05 conectaUrl05 = new ConectaUrl05();
try
{
trustAllHttpsCertificates();
HostnameVerifier hv = new HostnameVerifier()
{
public boolean verify(String urlHostName, SSLSession session)
{
System.out.println("Warning: URL Host: " + urlHostName + " vs. "
+ session.getPeerHost());
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
URL url = new URL("https://148.91.92.44:443/TPIS-VALEACCENTURE-Incident");
URLConnection conn = url.openConnection();
HttpsURLConnection urlConn = (HttpsURLConnection) conn;
urlConn.setRequestProperty("Content-Type", "text/xml");
urlConn.setRequestProperty("Content-transfer-encoding", "UTF-8");
urlConn.setRequestProperty("Content-length", "36");
urlConn.setRequestMethod("POST");
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
conectaUrl05.debug("URL READY");
String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
OutputStreamWriter wr = new OutputStreamWriter(urlConn.getOutputStream());
wr.write(data);
wr.flush();
// Write to the output stream for server
PrintWriter out = new PrintWriter(urlConn.getOutputStream());
out.println("<test><from>my test client</from></test>");
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
conectaUrl05.debug("INPUT READY");
String str;
while( (str=in.readLine()) != null) {
System.out.println(str);
}
in.close();
conectaUrl05.debug("EVERYTHING IS DONE!!!");
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void debug(String s)
{
System.out.println("[DEBUG] -- TestServlet -- \n" + s);
}
private static void trustAllHttpsCertificates() throws Exception
{
// Create a trust manager that does not validate certificate chains:
javax.net.ssl.TrustManager[] trustAllCerts =
new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new miTM();
trustAllCerts[0] = tm;
javax.net.ssl.SSLContext sc =
javax.net.ssl.SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(
sc.getSocketFactory());
}
}
class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager{
public java.security.cert.X509Certificate[] getAcceptedIssuers(){
return null;
}
public boolean isServerTrusted( java.security.cert.X509Certificate[] certs){
return true;
}
public boolean isClientTrusted(java.security.cert.X509Certificate[] certs){
return true;
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException
{
return;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException
{
return;
}
}
Alguêm tem alguma idéia?
Obrigado.