我正在尝试从jsp向Opera Server发送HTTPS Post Request。但我不能。我找到了许多HTTP Post Request示例但没有HTTPS。我现在收到一条错误消息..
java.lang.ClassCastException: sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to com.sun.net.ssl.HttpsURLConnection
此代码的导入如下
java.security.Security, com.sun.net.ssl.
我的代码如下
try{
String data = URLEncoder.encode("AccountID", "UTF-8") + "=" + URLEncoder.encode(accountid, "UTF-8");
data += "&" + URLEncoder.encode("CallerTransactionID", "UTF-8") + "=" + URLEncoder.encode(callertransactionid, "UTF-8");
data += "&" + URLEncoder.encode("CurrentTime", "UTF-8") + "=" + URLEncoder.encode(currenttime, "UTF-8");
data += "&" + URLEncoder.encode("ErrorURL", "UTF-8") + "=" + URLEncoder.encode(errorurl, "UTF-8");
//data += "&" + URLEncoder.encode("FrameURL", "UTF-8") + "=" + URLEncoder.encode(frameurl, "UTF-8");
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
URL opxurl = new URL("https://opx-test.opera.com/opx/2.0/OPXPaymentEnable");
HttpsURLConnection connopx = (HttpsURLConnection) opxurl.openConnection();
connopx.setDoInput(true);
connopx.setDoOutput(true);
connopx.setRequestMethod("POST");
connopx.setFollowRedirects(true);
connopx.setRequestProperty("Content-length",String.valueOf(data.length()));
connopx.setRequestProperty("Content-Type","application/x-www- form-urlencoded");
// open up the output stream of the connection
DataOutputStream output = new DataOutputStream(connopx.getOutputStream());
// write out the data
int dataLength = data.length();
output.writeBytes(data);
//output.flush();
System.out.println("HOly Portal ResponseDesc Code:"+connopx.getResponseCode()+" : "+connopx.getResponseMessage());
// get ready to read the response from the cgi script
DataInputStream input = new DataInputStream( connopx.getInputStream() );
// read in each character until end-of-stream is detected
for( int c = input.read(); c != -1; c = input.read() )
System.out.print("HolyPortal respnse: "+ (char)c );
input.close();
答案 0 :(得分:1)
在所有connopx的设置之后,您必须致电
connopx.connect();
我使用此导入,它适用于我的代码:
import javax.net.ssl.HttpsURLConnection;
我没有URL opxurl =
还要查看此answer with similar issue。
编辑:
为避免错误500删除“application / x-www-form-urlencoded”中的空格,并在output.writeBytes(data);
之后添加这两行:
output.flush();
output.close();
然后它应该工作。
答案 1 :(得分:0)
这应该是你的代码
try {
URL url = new URL("yourURL");
URLConnection conn = url.openConnection();
if (conn instanceof HttpsURLConnection) {
// Try again as HTTPS
HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();
conn1.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
conn1.getResponseCode();
}
}
catch (MalformedURLException e) {
}
catch (IOException e) {
}