Http 设置超时 + X509协议

本文详细探讨了如何在HTTP请求中设置超时以及使用X509协议进行安全通信。分别介绍了将URL和PARAMS分开发送、放在头部一起发送的POST方法,同时提及了默认的HTTP操作以及GET请求的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

POST

URL, PARAMS 分开发送

public class HttpClient {

	private static final AllowAllHostnameVerifier HOSTNAME_VERIFIER = new AllowAllHostnameVerifier();

	private static X509TrustManager xtm = new X509TrustManager() {
		@Override
		public void checkClientTrusted(X509Certificate[] chain, String authType) {
		}

		@Override
		public void checkServerTrusted(X509Certificate[] chain, String authType) {
		}

		@Override
		public X509Certificate[] getAcceptedIssuers() {
			return null;
		}
	};

	private static X509TrustManager[] xtmArray = new X509TrustManager[] { xtm };

	static String paths = "";
	static Map<String, String> paramss = null;
	static String encodings = "";
	// static String bakold = "";
	static String RetBak = "";
	static boolean isRe = true;
	static int isStop = 0;

	// 增加捕获超时异常
	public static String sendPOSTRequestForInputStream(String path, Map<String, String> params, String encoding) throws ConnectTimeoutException {

		paths = path;
		paramss = params;
		encodings = encoding;
		// bakold = "";
		RetBak = "";
		isRe = true;
		isStop = 0;

		class acceptThread extends Thread {
			Map<String, String> paramsa = null;

			public acceptThread(Map<String, String> params) {
				this.paramsa = params;
			}

			InputStream in = null;
			private HttpsURLConnection conn = null;

			@Override
			public void run() {
				String bakn = "";
				try {

					StringBuilder entityBuilder = new StringBuilder("");
					if (paramsa != null && !paramss.isEmpty()) {
						for (Map.Entry<String, String> entry : paramss.entrySet()) {
							entityBuilder.append(entry.getKey()).append('=');
							entityBuilder.append(URLEncoder.encode(entry.getValue(), encodings));
							entityBuilder.append('&');
						}
						entityBuilder.deleteCharAt(entityBuilder.length() - 1);
					}

					byte[] entity = entityBuilder.toString().getBytes();
					URL url = new URL(paths);
					conn = (HttpsURLConnection) url.openConnection();
					if (conn instanceof HttpsURLConnection) {
						// Trust all certificates
						SSLContext context = SSLContext.getInstance("TLS");
						context.init(new KeyManager[0], xtmArray, new SecureRandom());
						SSLSocketFactory socketFactory = context.getSocketFactory();
						conn.setSSLSocketFactory(socketFactory);
						conn.setHostnameVerifier(HOSTNAME_VERIFIER);
					}
					conn.setConnectTimeout(20000);// !!!!
					conn.setReadTimeout(20000);
					conn.setRequestMethod("POST");
					conn.setDoOutput(true);
					conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
					conn.setRequestProperty("Content-Length", String.valueOf(entity.length));
					Log.i("PathInfo", paths + "   " + entityBuilder.toString());
					OutputStream outStream = conn.getOutputStream();
					outStream.write(entity);
					outStream.flush();
					outStream.close();
					in = conn.getInputStream();

					int num = 0;
					byte[] resu = new byte[1024];
					// StringBuilder sb = new StringBuilder(); //异步
					StringBuffer sb = new StringBuffer(); // 同步
					while ((num = in.read(resu)) != -1) {
						bakn = new String(resu, 0, num);
						// RetBak += URLDecoder.decode(bakn, encodings);
						sb.append(URLDecoder.decode(bakn, encodings));
					}

					RetBak = sb.toString();
					in.close();
					Log.e("Return", RetBak);
				} catch (Exception e) {
					e.printStackTrace();
					RetBak = "";
				} finally {
					try {
						if (in != null) {
							in.close();
						}
						if (conn != null) {
							conn.disconnect();
						}
					} catch (IOException e) {
						e.printStackTrace();
						Log.e("CLOUD", "InvokeWebServiceHelper类中释放资源出错");
					}
				}

				isRe = false;
			}
		}

		acceptThread abc = new acceptThread(params);
		abc.start();

		while (isRe) {
			SystemClock.sleep(1);
			isStop++;
			if (isStop > 120000) {
				break;
			}
		}
		return RetBak;

	}
}

GET

URL,PARAMS 放在头里一起发送

public class HttpClientGet {

	private static final AllowAllHostnameVerifier HOSTNAME_VERIFIER = new AllowAllHostnameVerifier();

	private static X509TrustManager xtm = new X509TrustManager() {
		@Override
		public void checkClientTrusted(X509Certificate[] chain, String authType) {
		}

		@Override
		public void checkServerTrusted(X509Certificate[] chain, String authType) {
		}

		@Override
		public X509Certificate[] getAcceptedIssuers() {
			return null;
		}
	};

	private static X509TrustManager[] xtmArray = new X509TrustManager[] { xtm };

	static String paths = "";
	static Map<String, String> paramss = null;
	static String encodings = "";
	static String RetBak = "";
	static boolean isRe = true;
	static int isStop = 0;

	// 增加捕获超时异常
	public static String sendPOSTRequestForInputStream(String path, Map<String, String> params, String encoding) throws ConnectTimeoutException {

		paths = path;
		paramss = params;
		encodings = encoding;
		RetBak = "";
		isRe = true;
		isStop = 0;

		class acceptThread extends Thread {
			Map<String, String> paramsa = null;

			public acceptThread(Map<String, String> params) {
				this.paramsa = params;
			}

			private HttpsURLConnection conn = null;
			InputStream in = null;

			@Override
			public void run() {
				String bakn = "";
				try {

					StringBuilder entityBuilder = new StringBuilder("");
					if (paramsa != null && !paramss.isEmpty()) {
						for (Map.Entry<String, String> entry : paramss.entrySet()) {
							entityBuilder.append(entry.getKey()).append('=');
							entityBuilder.append(URLEncoder.encode(entry.getValue(), encodings));
							entityBuilder.append('&');
						}
						entityBuilder.deleteCharAt(entityBuilder.length() - 1);
					}

					String httpurl = paths + entityBuilder.toString();
					Log.i("AMDownLoad", "httpurl_GET" + httpurl);
					URL url = new URL(httpurl);
					conn = (HttpsURLConnection) url.openConnection();
					if (conn instanceof HttpsURLConnection) {
						// Trust all certificates
						SSLContext context = SSLContext.getInstance("TLS");
						context.init(new KeyManager[0], xtmArray, new SecureRandom());
						SSLSocketFactory socketFactory = context.getSocketFactory();
						conn.setSSLSocketFactory(socketFactory);
						conn.setHostnameVerifier(HOSTNAME_VERIFIER);
					}

					conn.setConnectTimeout(15000);
					conn.setReadTimeout(15000);
					conn.setDoInput(true);
					conn.setRequestMethod("GET");
					conn.setRequestProperty("Content-Type", "text/html");
					// conn.setRequestProperty("Content-Type",
					// "application/x-www-form-urlencoded");
					conn.setRequestProperty("Accept-Charset", encodings);
					conn.setRequestProperty("contentType", encodings);
					in = conn.getInputStream();

					int num = 0;
					byte[] resu = new byte[1024];
					StringBuffer sb = new StringBuffer(); // 同步
					while ((num = in.read(resu)) != -1) {
						bakn = new String(resu, 0, num);
						sb.append(URLDecoder.decode(bakn, encodings));
					}

					RetBak = sb.toString();

					Log.e("Return", RetBak);
				} catch (Exception e) {
					e.printStackTrace();
					RetBak = "";

				} finally {
					try {
						if (in != null) {
							in.close();
						}
						if (conn != null) {
							conn.disconnect();
						}
					} catch (IOException e) {
						e.printStackTrace();
						Log.e("CLOUD", "InvokeWebServiceHelper类中释放资源出错");
					}
				}

				isRe = false;
			}
		}

		acceptThread abc = new acceptThread(params);
		abc.start();

		while (isRe) {
			SystemClock.sleep(1);
			isStop++;
			if (isStop > 120000) {
				break;
			}
		}
		return RetBak;

	}
}


Defalt 方法

POST

private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            String url = BaseServicesInfo.SERVER_BASE_PATH + fileName;
            HttpPost httpRequest = new HttpPost(url);
            try{
                HttpEntity entity = new UrlEncodedFormEntity(params);
                httpRequest.setEntity(entity);
                HttpClient client = new DefaultHttpClient();
                // 请求超时
                client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 20000);
                // 读取超时
                client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 20000    );
                HttpResponse response = client.execute(httpRequest);
                if(response.getStatusLine().getStatusCode() == 200){
                    str = EntityUtils.toString(response.getEntity());
                    Message msg = new Message();
                    Bundle data = new Bundle();
                    data.putString("value", str);
                    msg.setData(data);
                    handler.sendMessage(msg);
                }else{
                    str = String.valueOf(response.getStatusLine().getStatusCode());
                    Message msg = new Message();
                    Bundle data = new Bundle();
                    data.putString("error", str);
                    msg.setData(data);
                    handler.sendMessage(msg);
                }
            }catch(Exception e){
                e.printStackTrace();
                Message msg = new Message();
                Bundle data = new Bundle();
                data.putString("error", str);
                msg.setData(data);
                handler.sendMessage(msg);
            }
        }
    };


GET

Runnable runnable = new Runnable() {
        @Override
        public void run() {
            HttpURLConnection conn = null;
            InputStream inputStream = null;
            try {
                URL url = new URL(baseUrl);
                conn = (HttpURLConnection)url.openConnection();
                conn.setConnectTimeout(10000);
                conn.setReadTimeout(8000);
                conn.setDoInput(true);
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Content-Type", "text/html");
                conn.setRequestProperty("Accept-Charset", "utf-8");
                conn.setRequestProperty("contentType", "utf-8");
                inputStream = conn.getInputStream();
                byte[] buffer = null;
                if(conn.getResponseCode() == 200){
                    buffer = new byte[1024];
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    int len;
                    while ((len = inputStream.read(buffer)) != -1)
                    {
                        out.write(buffer, 0, len);
                    }
                    buffer = out.toByteArray();
                }
                mCallback.HandleAsync(buffer);
                SendMsg("value",buffer);
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("sjr","Network-error");
            }
            finally{
                try {
                    if(inputStream != null){
                        inputStream.close();
                    }
                    if(conn != null){
                        conn.disconnect();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.e("sjr","InvokeWebServiceHelper类中释放资源出错");
                }
            }
        }
    };


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值