`
baoliangquan
  • 浏览: 8285 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

https处理方式--URLConnection

阅读更多
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;


public class HttpPostUtil {
	
	/** 应答内容 */
	private String resContent;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String url = "http://10.200.48.135:80/paycenter/queryOrder.do?order_no=1364953038575&partner=130&sign=4ecb9b1225b2599e270c937071bd482a";
		HttpPostUtil postutil = new HttpPostUtil();
		if(postutil.postRequest(url)){
			System.out.print(postutil.getResContent());
		}
		
	}
	
	/**
	 * 发送post请求
	 * @param strUrl
	 * @return
	 */
	public boolean postRequest(String strUrl){
		//请求url
		String url = this.getURL(strUrl);  
		//请求参数
		String queryString = this.getQueryString(strUrl); 
		try{
		if (url.indexOf("http://") != -1) {
			this.resContent = this.postHttp(url, queryString);
			return true;
		 } else if (url.indexOf("https://") != -1) {
			this.resContent = this.postHttps(url, queryString);
		    return true;
		  }
		}catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	public String postHttp(String urlStr, String params) { 
		System.out.println("http方式提交的URL: "+urlStr + "?" + params); 
		PrintWriter out = null; 
		BufferedReader in = null; 
		StringBuffer result = new StringBuffer();
		try { 
			URL realUrl = new URL(urlStr); 
			// 打开和URL之间的连接 
			URLConnection conn = realUrl.openConnection(); 
			// 设置通用的请求属性 
			conn.setRequestProperty("accept", "*/*"); 
			conn.setRequestProperty("connection", "Keep-Alive"); 
			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); 
			// 发送POST请求必须设置如下两行 
			conn.setDoOutput(true); 
			conn.setDoInput(true); 
			// 获取URLConnection对象对应的输出流 
			out = new PrintWriter(conn.getOutputStream()); 
			// 发送请求参数 
			out.print(params); 
			// flush输出流的缓冲 
			out.flush(); 
			// 定义BufferedReader输入流来读取URL的响应 
			in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
			String line = ""; 
			while ((line = in.readLine()) != null) { 
				result.append(line); 
			} 
//			System.out.println("remote host respone : "+result);
			System.out.println("远程主机返回文本结果:"+result); 
		} catch (Exception e) { 
			e.printStackTrace();
		} finally { 
			try { 
				if (out != null) { 
					out.close(); 
					out = null; 
				} 
				if (in != null) { 
					in.close(); 
					in = null; 
				} 
			} catch (Exception ex) { 
				ex.printStackTrace();
			} 
		}
		
		return result.toString(); 
	}

	/**
	 * 以SSL方式提交请求
	 * @param urlString  提交的url地址
	 * @param data		   提交的请求参数
	 * @return
	 * @throws NoSuchAlgorithmException
	 * @throws KeyManagementException
	 * @throws IOException
	 */
	public String postHttps(String urlString, String data) throws NoSuchAlgorithmException, KeyManagementException, IOException
			{
		System.out.println("https方式提交的URL:"+urlString);
		System.out.println("提交的参数:"+data);
		OutputStreamWriter os = null;

			URL url = new URL(urlString);
			URLConnection con = url.openConnection();
			System.out.println("连接类型:"+ con.getClass());
			BufferedReader in = null; 
			StringBuffer result = new StringBuffer();
	
			if (con instanceof javax.net.ssl.HttpsURLConnection) {
				System.out.println("*** openConnection returns an instanceof javax.net.ssl.HttpsURLConnection");
				
				//信任所有证书 开始
				javax.net.ssl.SSLContext sc = null;
				javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[] { new javax.net.ssl.X509TrustManager() {
				public java.security.cert.X509Certificate[] getAcceptedIssuers() {
					return null;
				}
				public void checkClientTrusted(
						java.security.cert.X509Certificate[] certs, String authType) {
				}
				public void checkServerTrusted(
						java.security.cert.X509Certificate[] certs, String authType) {
				}
				} };

				// Install the all-trusting trust manager
				sc = javax.net.ssl.SSLContext.getInstance("SSL");
				sc.init(null, trustAllCerts, new java.security.SecureRandom());
				javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
				//信任所有证书 结束
					
				javax.net.ssl.HostnameVerifier hv = new javax.net.ssl.HostnameVerifier() {
					public boolean verify(String urlHostName, javax.net.ssl.SSLSession session) {
						return urlHostName.equals(session.getPeerHost());
					}
				};
				javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(hv);
				javax.net.ssl.HttpsURLConnection conn = null;
				conn = (javax.net.ssl.HttpsURLConnection) con;
				// conn.setRequestProperty("Content-Type", "text/xml");
				conn.setDoOutput(true);
				conn.setFollowRedirects(true);
				// conn.setReadTimeout(30000);
				os = new OutputStreamWriter(conn.getOutputStream());
				os.write(data);
				os.flush();
				if (conn.getResponseCode() == 302 || conn.getResponseCode() == 200) {
					System.out.println("https请求发送成功。");
					System.out.println("返回码:" + conn.getResponseCode());
				}
				// 定义BufferedReader输入流来读取URL的响应 
				in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
				String line = ""; 
				while ((line = in.readLine()) != null) { 
					result.append(line); 
				}
			}
			else if (con instanceof com.sun.net.ssl.HttpsURLConnection) {
				System.out.println("***openConnection returns an instanceof com.sun.net.ssl.HttpsURLConnection");
				//信任所有证书 开始
				com.sun.net.ssl.SSLContext sc = null;
				com.sun.net.ssl.TrustManager[] trustAllCerts = new com.sun.net.ssl.TrustManager[] { new com.sun.net.ssl.X509TrustManager() {
				public java.security.cert.X509Certificate[] getAcceptedIssuers() {
					return null;
				}
				@Override
				public boolean isClientTrusted(X509Certificate[] arg0) {
					// TODO Auto-generated method stub
					return true;
				}
				@Override
				public boolean isServerTrusted(X509Certificate[] arg0) {
					// TODO Auto-generated method stub
					return true;
				}
				} };
				// Install the all-trusting trust manager
				sc = com.sun.net.ssl.SSLContext.getInstance("TLSv1");
				sc.init(null, trustAllCerts, new java.security.SecureRandom());
				com.sun.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
				//信任所有证书 结束
				
				com.sun.net.ssl.HttpsURLConnection conn = null;
				conn = (com.sun.net.ssl.HttpsURLConnection) con;
				com.sun.net.ssl.HostnameVerifier hv = new com.sun.net.ssl.HostnameVerifier() {
					@Override
					public boolean verify(String arg0, String arg1) {
						return true;
					}
				};
				com.sun.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(hv);
				conn.setAllowUserInteraction(true);
				conn.setDoOutput(true);
				
			    os = new OutputStreamWriter(conn.getOutputStream());
				os.write(data);
				os.flush();

				if (conn.getResponseCode() == 302 || conn.getResponseCode() == 200) {
					System.out.println("https请求发送成功。");
					System.out.println("返回码:" + conn.getResponseCode());
				}
				// 定义BufferedReader输入流来读取URL的响应 
				in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
				String line = ""; 
				while ((line = in.readLine()) != null) { 
					result.append(line);
				}
			}
			System.out.println("远程主机返回的文本结果:"+result); 
			
		return result.toString();
	}
	
	/**
	 * 获取不带查询串的url
	 * @param strUrl
	 * @return String
	 */
	private String getURL(String strUrl) {

		if(null != strUrl) {
			int indexOf = strUrl.indexOf("?");
			if(-1 != indexOf) {
				return strUrl.substring(0, indexOf);
			} 
			
			return strUrl;
		}
		
		return strUrl;
		
	}
	
	/**
	 * 获取查询串
	 * @param strUrl
	 * @return String
	 */
	private String getQueryString(String strUrl) {
		
		if(null != strUrl) {
			int indexOf = strUrl.indexOf("?");
			if(-1 != indexOf) {
				return strUrl.substring(indexOf+1, strUrl.length());
			} 
			
			return "";
		}
		
		return strUrl;
	}

	public String getResContent() {
		return resContent;
	}

	public static InputStream String2Inputstream(String str) {
		return new ByteArrayInputStream(str.getBytes());
	}
	
}
分享到:
评论

相关推荐

    java中用URLConnection_类post方式提交表单

    java中用URLConnection类post方式提交表单 java中用URLConnection类post方式提交表单是指在java应用程序中使用java.net.URLConnection类来实现POST方式的表单提交。POST方式是HTTP协议中的一种常见的请求方法,它...

    UrlConnection连接和Socket连接的区别

    在Java的网络编程中,`UrlConnection`和`Socket`是两种常见的网络连接方式,它们在处理HTTP请求和响应时有着不同的特性和应用场景。本文将深入探讨这两种连接方式的区别,并结合`HttpURLConnectionImpl.java`、`...

    客户端页面截取!URLCONNECTION

    首先,URLConnection是java.net包中的一个抽象类,它是所有HTTP连接的基类,包括HTTP、HTTPS等多种协议。它提供了对URL的基本操作,如打开连接、发送请求、接收响应等。利用URLConnection,我们可以手动构建HTTP请求...

    URLConnection的使用(1)

    通过以上介绍,我们可以了解到`URLConnection`提供了一种简单有效的方式来处理HTTP请求和响应,无论是GET还是POST请求,都可以通过这种方式来实现。此外,在实际应用中还需要注意各种细节问题,例如异常处理、资源...

    使用URL和URLConnection(多线程下载)

    对于大型文件的下载,传统的单线程下载方式往往无法充分利用网络带宽,尤其是在高延迟或不稳定网络环境下,下载效率会大打折扣。为了解决这一问题,多线程下载技术应运而生。本文将详细介绍如何使用Java中的`URL`和`...

    java URLConnection全面解析(通俗易懂,包括cookie操作和上传文件)

    ### Java URLConnection全面解析 #### 一、简介与准备工作 ...当然,实际开发中还可能遇到更多复杂的情况,例如错误处理、HTTPS支持等,但掌握了这些基础知识之后,就能够更好地应对各种需求和挑战。

    java中用URLConnection类post方式提交表单.pdf

    Java 中使用 URLConnection 类 POST 方式提交表单 Java 中使用 URLConnection 类 POST 方式提交表单是 Java 语言中的一种常用技术,用于实现 HTTP 请求代理。下面我们将详细介绍该技术的实现细节。 首先,我们需要...

    通过java.net.URLConnection发送HTTP请求

    在Java编程中,`java.net.URLConnection`是用于与各种Internet协议进行通信的抽象类,而HTTP...虽然这种方式相对原始且需要更多的手动操作,但在某些特定场景下,直接使用URLConnection可以提供更好的控制和灵活性。

    HttpURLConnection OKHttp实现请求

    本文将详细介绍这两种方式的实现原理及如何在实际项目中使用。 首先,`HttpURLConnection`是Java标准库提供的网络通信接口,它是低级别的API,允许应用程序与HTTP服务器进行交互。使用`HttpURLConnection`进行网络...

    Android使用URLConnection提交请求的实现

    本文将详细介绍如何在Android应用中使用`URLConnection`来提交HTTP请求,包括GET和POST两种常见方式。 首先,我们需要理解`URLConnection`的基本用法。`URLConnection`是所有URL连接的抽象基类,通过`URL`对象的`...

    一个通过Socket或URLConnection传文件的示例

    在IT领域,网络通信是不可或缺的一部分,而Socket和URLConnection是Java中实现网络通信的两种主要方式。本示例将深入探讨如何使用这两种方法进行文件传输。 首先,让我们了解Socket编程。Socket是网络通信中的基本...

    java URLConnection全面总结(包括cookie的详细操作).docx

    `URLConnection`默认不支持Cookie管理,但可以通过以下方式手动处理: ```java Map, List<String>> headers = connection.getHeaderFields(); List<String> cookiesHeader = headers.get("Set-Cookie"); if ...

    httpClient和URLConnection的区别

    在Android应用开发中,进行网络通信是常见的任务,其中两种主要的请求方式是使用`HttpURLConnection`和`HttpClient`。虽然两者都能实现HTTP通信,但它们在功能、使用方式和性能上存在一些区别。 首先,Apache ...

    Android开发使用URLConnection进行网络编程详解

    设置请求头字段的值可以影响服务器对请求的处理方式。例如,可以设置 accept 字段的值为 "*/*",表示接受所有类型的响应。 发送请求 --------- 设置 URLConnection 的参数后,可以使用 connect() 方法打开到远程...

    IOS 程序使用urlconnection连接服务器方法

    ### IOS程序使用URLConnection连接服务器方法 #### 一、引言 在iOS开发中,应用程序往往需要与后端服务器进行通信来获取数据或提交用户操作的结果。`NSURLConnection`(现已被`URLSession`替代)是一种常用的网络...

    Java 必知必会的 URL 和 URLConnection使用

    在Java编程中,理解和熟练使用URL(Uniform Resource Locator)和URLConnection是至关重要的,因为它们是进行网络通信的基础。本文将深入探讨这两个核心概念,并通过示例代码帮助你掌握它们的用法。 首先,URL是...

    Rrtrofit2.1.0 Rxjava1.1.9 Okhttp3.4.1 converter-gson-2.1.0 adapter-rxjava-2.1.0

    Okhttp 3.4.1版本在性能和稳定性上都有所提升,`okhttp-3.4.1.jar`和`okhttp-urlconnection-2.5.0.jar`分别包含了OkHttp的核心库和URLConnection的适配器,使得OkHttp能更好地与Java标准库兼容。 **Gson** 是Google...

Global site tag (gtag.js) - Google Analytics