Re: POST request to SSL/HTTPS URL
On Oct 6, 10:41 pm, Arne Vajh=F8j <a...@vajhoej.dk> wrote:
Lew wrote:
Lew wrote:
Except for one thing - if the person is writing client code, what
browser are they referring to?
Arne Vajh=F8j wrote:
browser--(HTTP)--JSP/servlet--(HTTP)--some other web server
^
code here
It is HTTP client to the other web server.
Output can be send back to the browser either as-is or
modified.
The middle part is also a HTTP server, but I will not call
the JSP/servlet that because the server part is in the
container.
Aha!
At least that is how I interpreted the code and reference
to browser.
There is always the possibility that I completely
misunderstood everything.
Arne
Sorry to come back with this but I really have been spending hours on
this today and I'm just not quite there.
I've tried many solutions and got them working for POST HTTP but HTTPS
just isn't there.
Arne I tried your solution and I couldn't get it to work, and to be
honest it was over a few hours ago now since I tried so I can't
remember which one out of the many attempts and error messages I got
today, sorry.
I've done even more googling and came across the jakarta commons
httpclient package (http://jakarta.apache.org/httpcomponents/
httpclient-3.x/) and decided to give that a go. This package handles
both HTTP and HTTPS.
Again I tried it with HTTP and it worked great (see code below). I
then switched to a HTTPS connection and I get an
SSLHandshakeException, top few lines of stack trace here ...
[06/10/07 23:25:32:062 BST] 5d9100f1 SystemErr R Fatal transport
error: unknown certificate
[06/10/07 23:25:32:062 BST] 5d9100f1 SystemErr R
javax.net.ssl.SSLHandshakeException: unknown certificate
[06/10/07 23:25:32:062 BST] 5d9100f1 SystemErr R at
com.ibm.jsse.bg.a(Unknown Source)
[06/10/07 23:25:32:062 BST] 5d9100f1 SystemErr R at
com.ibm.jsse.b.a(Unknown Source)
[06/10/07 23:25:32:062 BST] 5d9100f1 SystemErr R at
com.ibm.jsse.b.write(Unknown Source)
[06/10/07 23:25:32:062 BST] 5d9100f1 SystemErr R at
java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81)
[06/10/07 23:25:32:062 BST] 5d9100f1 SystemErr R at
java.io.BufferedOutputStream.flush(BufferedO
So I do some more googling and I read about adding these two lines:
System.setProperty("java.protocol.handler.pkgs",
"com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
which I do to the top of the code below and I then get a different
exception - example stack trace top few lines here ...
[06/10/07 23:28:32:562 BST] 69b640f1 WebGroup E SRVE0026E:
[Servlet Error]-[Cipher buffering error in JCE provider IBMJCE]:
java.lang.RuntimeException: Cipher buffering error in JCE provider
IBMJCE
at com.sun.net.ssl.internal.ssl.CipherBox$JCECipherBox.a(DashoA12275)
at com.sun.net.ssl.internal.ssl.OutputRecord.a(DashoA12275)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
why is it so difficult to connect to SSL?
Any help really appreciated. Thanks.
-------------------
My code:
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("https://somesecureurl.com");
NameValuePair[] data = {
new NameValuePair("name1", "value1"),
....
new NameValuePair("nameX","valueX")
};
post.setRequestBody(data);
try
{
// Execute the method.
int statusCode = client.executeMethod(post);
if (statusCode != HttpStatus.SC_OK)
{
System.err.println("Method failed: " + post.getStatusLine());
}
// Read the response body.
byte[] responseBody = post.getResponseBody();
// Deal with the response.
// Use caution: ensure correct character encoding and is not binary
data
out.println(new String(responseBody));
}
catch (HttpException e)
{
System.err.println("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
}
catch (IOException e)
{
System.err.println("Fatal transport error: " + e.getMessage());
e.printStackTrace();
}
finally
{
// Release the connection.
post.releaseConnection();
}