这是我在http服务器上向servlet发出post请求的代码
private static void post(String endpoint, Map<String, String> params)
throws IOException {
URL url;
try {
url = new URL(endpoint);
} catch (MalformedURLException e) {
throw new IllegalArgumentException("invalid url: " + endpoint);
}
StringBuilder bodyBuilder = new StringBuilder();
Iterator<Entry<String, String>> iterator = params.entrySet().iterator();
// constructs the POST body using the parameters
while (iterator.hasNext()) {
Entry<String, String> param = iterator.next();
bodyBuilder.append(param.getKey()).append('=')
.append(param.getValue());
if (iterator.hasNext()) {
bodyBuilder.append('&');
}
}
String body = bodyBuilder.toString();
Log.v(TAG, "Posting '" + body + "' to " + url);
byte[] bytes = body.getBytes();
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setFixedLengthStreamingMode(bytes.length);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded;charset=UTF-8");
// post the request
OutputStream out = conn.getOutputStream();
out.write(bytes);
out.close();
// handle the response
int status = conn.getResponseCode();
if (status != 200) {
throw new IOException("Post failed with error code " + status);
}
} finally {
if (conn != null) {
conn.disconnect();
}
}
}
当我的结束点像 http:// myipaddress:myport / 时,它运行良好,但当我将其更改为 https <时/ strong>连接无法正常工作我也读到了 HttpsURLConnection ,但我没有得到如何实现它,他们已经写了这段代码:
KeyStore keyStore = ...;
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(keyStore);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
URL url = new URL("https://www.example.com/");
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setSSLSocketFactory(context.getSocketFactory());
InputStream in = urlConnection.getInputStream();
但是我无法获得Keystore中应该只有文件文件的内容,如果我使用的是Keystore.getInstance(字符串类型),那么如何获取证书类型。
请帮帮我。
答案 0 :(得分:0)
请检查这个以发送安全服务器的发布请求
//请求
String Verify_Mobile_URL ="https://www.sample.php";
try
{
StringBuilder postDataBuilder = new StringBuilder();
postDataBuilder.append("param1").append("=").append("paramvalue");
postDataBuilder.append("&").append("param2").append("=").append("paramvalue");
byte[] postData = postDataBuilder.toString().getBytes();
// Hit the dm URL.
URL url = new URL(Verify_Mobile_URL);
HttpsURLConnection.setDefaultHostnameVerifier(new AllVerifier());
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] { new AllTrustManager() }, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(60000);
conn.setConnectTimeout(35000);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length",Integer.toString(postData.length));
OutputStream out = conn.getOutputStream();
out.write(postData);
out.close();
int responseCode = conn.getResponseCode();
if(responseCode==200)
{
InputStream inputstream=conn.getInputStream();
String result=streamToString(inputstream); // here you will will get result from
}
catch(Exception e)
{
}
/**
* This method convert inputstream to string
* @param is - inputtream to be converted
* @return String - converted string
*/
public static String streamToString(InputStream is)
{
DataInputStream din = new DataInputStream(is);
StringBuffer sb = new StringBuffer();
try {
String line = null;
while ((line = din.readLine()) != null)
{
sb.append(line + "\n");
}
}
catch (Exception ex)
{}
finally
{
try
{ if(is!=null)
{
din.close();
is.close();
}
}
catch (Exception ex)
{}
}
return sb.toString();
}
public class AllTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return new X509Certificate[0];
}
}
public class AllVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
// TODO Auto-generated method stub
return true;
}
}