`
Java_Fan
  • 浏览: 81630 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

java HttpClient在客户端处理service服务数据解决方案一例

 
阅读更多
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.security.cert.CertificateException;
import java.util.Date;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import net.sf.json.JSONObject;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.log4j.Logger;

import com.tjsoft.util.StringUtil;

public class ClientUtil {
	private static Logger log = Logger.getLogger(ClientUtil.class);

	/**
	 * 登录 获取token
	 * 
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("deprecation")
	public static String login() throws Exception {
		log.info("info:"+new Date().toLocaleString()+"开始执行" + ClientUtil.class + "类 login()方法.");
		String url = ServiceUrlUtil.LOGIN;
		String json = "{\"loginId\":\"" + ServiceUrlUtil.SERVICE_LOGINID.trim()
				+ "\"," + "\"password\":\""
				+ ServiceUrlUtil.SERVICE_PASSWORD.trim() + "\","
				+ "\"auth_key\":\"" + ServiceUrlUtil.SERVICE_AUTHKEY.trim()
				+ "\"" + "}";
		//System.out.println("json----------------->"+json);
		String result = requestForStringUsePost(url, json);
		//System.out.println("result----------------->"+result);
		String eCode = JSONObject.fromObject(result).getString("eCode");
		String eMsg = JSONObject.fromObject(result).getString("eMsg");
		String token = JSONObject.fromObject(result).getString("token");
		//System.out.println("eCode----->"+eCode+",eMsg---------->"+eMsg+",token------------->"+token);
		log.info("info:"+new Date().toLocaleString()+"执行" + ClientUtil.class + "类 login()方法:" + eCode + "-"
				+ eMsg + ",返回值:" + token);
		return token;
	}

	/**
	 * 注销登录
	 * 
	 * @param access_token
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("deprecation")
	public static String logout(String token) throws Exception {
		log.info("info:"+new Date().toLocaleString()+"开始执行" + ClientUtil.class + "类 login()方法.");
		String url = ServiceUrlUtil.LOGOUT+"?token="+token;
		String result = ClientUtil.requestForStringUseGet(url);
		String eCode = JSONObject.fromObject(result).get("eCode").toString();
		String eMsg = JSONObject.fromObject(result).get("eMsg").toString();
		//System.out.println("eCode----->"+eCode+",eMsg---------->"+eMsg);
		log.info("info:"+new Date().toLocaleString()+"执行" + ClientUtil.class + "类 logout()方法:" + eCode + "-"
				+ eMsg + ".");
		return result;
	}

	/**
	 * 这里需要传入机构ID 查询机构下的窗口的时候 需要传入该机构编号 然后返回accessToken
	 * 
	 * @throws Exception
	 */
	/*
	 * public static String getSessionOrgCode(String orgCode) throws Exception {
	 * String url = "http://sxsl.sz.gov.cn/sxgl/c/api.pmi/login"; String json = "
	 * {\"key\":\"" + ServiceUrlUtil.APP_KEY + "\",\"secret\":\"" +
	 * ServiceUrlUtil.APP_SECRET + "\",\"loginname\":\"" +
	 * ServiceUrlUtil.ACCOUNT + "\", " + " \"pwd\":\"" + ServiceUrlUtil.PASSWORD +
	 * "\",\"dept\":\"" + orgCode + "\"}"; String result =
	 * ClientUtil.requestForStringUsePost(url, json); Object data =
	 * JSONObject.fromObject(result).get("data"); String access_token ="";
	 * if(data!=null){ access_token =
	 * JSONObject.fromObject(data).getString("access_token"); } return
	 * access_token; }
	 */

	/**
	 * 调用http请求,返回string结果数据
	 * 
	 * @param req
	 *            json格式请求参数
	 * @param fi
	 * @return
	 */
	public static String requestForStringUseGet(String url) throws Exception {
		String returnStr = "";
		HttpResponse httpResponse = null;
		DefaultHttpClient httpClient = null;
		httpClient = new DefaultHttpClient();// http客户端
		enableSSL(httpClient);

		httpClient.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS,
				false);
		// 连接超时
		httpClient.getParams().setParameter(
				CoreConnectionPNames.CONNECTION_TIMEOUT, new Integer(ServiceUrlUtil.TIME_OUT.trim()));

		// 请求超时
		httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
				30000);
		httpClient.getParams().setParameter(
				CoreProtocolPNames.USE_EXPECT_CONTINUE, false);

		// 请求地址
		HttpGet httpget = new HttpGet(url);

		@SuppressWarnings("unused")
		Date sDate = new Date();
		httpResponse = httpClient.execute(httpget);
		// 请求结果处理
		HttpEntity entity = httpResponse.getEntity();

		if (entity != null) {
			InputStream content = entity.getContent();
			returnStr = convertStreamToString(content);
		}
		// 释放连接
		if (httpClient != null) {
			httpClient.getConnectionManager().shutdown();
			httpClient = null;
		}
		return returnStr;

	}

	/**
	 * 调用http请求,返回string结果数据
	 * 
	 * @param req
	 *            json格式请求参数
	 * @param fi
	 * @return
	 */
	public static String requestForStringUsePost(String url, String json)
			throws Exception {
		String returnStr = "";
		HttpResponse httpResponse = null;
		DefaultHttpClient httpClient = null;

		@SuppressWarnings("unused")
		Date sDate = new Date();

		// 请求参数
		httpClient = new DefaultHttpClient();// http客户端
		enableSSL(httpClient);
		httpClient.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS,
				false);
		// 连接超时
		httpClient.getParams().setParameter(
				CoreConnectionPNames.CONNECTION_TIMEOUT, new Integer(ServiceUrlUtil.TIME_OUT.trim()));

		// 请求超时
		httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
				30000);
		httpClient.getParams().setParameter(
				CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
		// 请求地址
		HttpPost httppost = new HttpPost(url);
		if (StringUtil.isNotBlank(json)) {
			StringEntity stringEntity = new StringEntity(json, "utf-8");
			httppost.setEntity(stringEntity);
		} else {
			StringEntity stringEntity = new StringEntity("{}", "utf-8");
			httppost.setEntity(stringEntity);
		}
		httppost.setHeader("Content-type", "application/json");
		httpResponse = httpClient.execute(httppost);
		// 请求结果处理
		HttpEntity entity = httpResponse.getEntity();

		if (entity != null) {
			InputStream content = entity.getContent();
			returnStr = convertStreamToString(content);
		}

		// 释放连接
		if (httpClient != null) {
			httpClient.getConnectionManager().shutdown();
			httpClient = null;
		}
		return returnStr;
	}

	/**
	 * 将流转换为字符串
	 * 
	 * @param is
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String convertStreamToString(InputStream is)
			throws UnsupportedEncodingException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(is,
				"utf-8"));
		StringBuilder sb = new StringBuilder();
		String line = null;
		try {
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}

	@SuppressWarnings("deprecation")
	private static void enableSSL(DefaultHttpClient httpclient) {
		// 调用ssl
		try {
			SSLContext sslcontext = SSLContext.getInstance("TLS");
			sslcontext.init(null, new TrustManager[] { truseAllManager }, null);
			SSLSocketFactory sf = new SSLSocketFactory(sslcontext);
			sf
					.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
			Scheme https = new Scheme("https", sf, 443);
			httpclient.getConnectionManager().getSchemeRegistry().register(
					https);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 重写验证方法,取消检测ssl
	 */
	private static TrustManager truseAllManager = new X509TrustManager() {

		public void checkClientTrusted(
				java.security.cert.X509Certificate[] arg0, String arg1)
				throws CertificateException {

		}

		public void checkServerTrusted(
				java.security.cert.X509Certificate[] arg0, String arg1)
				throws CertificateException {

		}

		public java.security.cert.X509Certificate[] getAcceptedIssuers() {
			return null;
		}

	};

	/**
	 * 测试
	 * 
	 * @Description: TODO
	 * @param args
	 *            void
	 * @throws Exception
	 */
	@SuppressWarnings("static-access")
	public static void main(String[] args) throws Exception {
		ClientUtil util = new ClientUtil();
		String token = util.login();
		System.out.println(token);
		//String token = "VCRt853rOjH_aHh-1-fLLOQdW-wcu-pyLh2LT3jjP2cJ3SCF1qDp!-366310036!1384824151531";
		util.logout(token);
	}

}

分享到:
评论

相关推荐

    java实现httpclient服务端客户端代码例子

    java实现http接口服务端、客户端代码例子。使用jar(commons-codec-1.3.jar、commons-httpclient-3.0.1.jar、commons-logging-1.1.1.jar)

    HttpClient模拟客户端传输文件

    HttpClient模拟客户端传输文件是Java开发中的常见需求,尤其在与服务器进行交互时,例如上传用户数据、图片或者其他文件。在这个过程中,我们通常会使用POST请求将文件作为请求体发送到服务器。 首先,我们需要引入...

    java httpclient 模拟登录

    在Java编程中,HttpClient库是Apache提供的一款强大的HTTP客户端工具,用于执行HTTP请求,包括GET、POST、PUT等多种HTTP方法。在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站...

    Java HttpClient 全部的jar包

    Java HttpClient 是一个强大的HTTP客户端库,它允许Java开发者在应用程序中发送HTTP请求并接收响应,广泛应用于Web服务的调用、API接口测试以及自动化脚本等场景。在Java项目中,使用HttpClient可以实现与Web服务器...

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    在Java中,我们可以使用Keytool工具管理证书,但`InstallCert.java`提供了一种更方便的方式,尤其在自动化环境中。通过运行这个程序,你可以连接到一个需要客户端认证的服务器,获取其证书,并将其安装到本地的Java...

    httpclient http客户端

    7. 异步操作:HttpClient提供了异步API,可以在处理HTTP请求时避免阻塞主线程,提高应用的响应速度。 二、在Eclipse中使用HttpClient 1. 添加依赖:首先,需要在Eclipse项目中添加HttpClient的依赖。如果你使用的...

    JAVA httpclient jar下载

    httpclient常用封装工具 doGet(String url, Map, String> param) doPost(String url, Map, String> param) doPostJson(String url, String json)

    java httpclient 抓取 数据 和jar 包

    在本篇文章中,我们将深入探讨如何使用Java HttpClient来抓取网页数据以及如何打包成jar文件。 **一、Java HttpClient简介** Java HttpClient 是 Apache HttpClient 库的一部分,它提供了丰富的功能,包括连接管理...

    httpclient客户端jar.rar

    在进行错误处理时,HttpClient提供了丰富的异常类型,帮助开发者识别和解决与网络通信相关的问题。例如,`IOException`用于处理网络连接失败,`NoHttpResponseException`表示服务器没有响应,`HttpException`则通常...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    在处理动态内容的网页时,HttpClient可以方便地发送带有特定头信息的请求,模拟浏览器行为,绕过一些安全机制,如用户代理检测、加密或反爬虫策略。 ### 动态数据获取难点 动态数据通常指的是那些需要执行...

    httpclient妙用一 httpclient作为客户端调用webservice

    本篇文章将深入介绍如何使用HttpClient作为客户端调用Web服务。 首先,我们要明确什么是HTTP消息。HTTP消息是客户端和服务器间进行通信的基本单位,它包括请求消息和响应消息。请求消息由请求行、请求头、空行和...

    httpclient 客户端发送xml报文到服务器端采用post方式(加密)传递

    在IT行业中,XML(eXtensible Markup Language)是一种用于数据交换的标准格式,尤其在Web服务和客户端-服务器通信中广泛应用。本示例探讨的是如何使用HTTPClient库在客户端发送XML报文到服务器端,且报文通过POST...

    Java 使用HttpClient保持SESSION状态

    在处理Web应用程序时,有时我们需要保持用户的登录状态,即SESSION状态。这通常涉及到Cookie管理,因为服务器通过Cookie来跟踪客户端的会话。下面我们将详细探讨如何在Java中使用HttpClient来实现这一目标。 首先,...

    java使用HttpClient通过url下载文件到本地

    在Java编程环境中,HttpClient库是Apache HTTP Components项目的一部分,它为开发者提供了强大的HTTP客户端功能,可以用来发送HTTP请求并接收响应。在这个特定的场景中,我们利用HttpClient来从指定的URL下载文件到...

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    JAVA HttpClient是Apache软件基金会提供的一个开源实现HTTP客户端的Java库,能够帮助开发者轻松地与HTTP服务器进行交互。在实际项目中,我们经常需要使用HttpClient来发送POST请求,以便与服务器进行数据交换。但是...

    java httpClient 工具类 java httpClient 工具类

    java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient ...

    java 中HttpClient传输xml字符串实例详解

    Java中的HttpClient是一个强大的HTTP客户端库,常用于与服务器进行数据交互。在本实例中,我们将讲解如何使用HttpClient来传输XML字符串。首先,我们需要确保引入了正确的依赖,包括Apache HttpClient、HttpMime、...

    Java 客户端服务器程序 学习笔记

    在Java编程领域,客户端-服务器(Client-Server)程序是一种常见的架构模式,它涉及两个主要组件:客户端应用程序和服务器端应用程序。在这个“Java客户端服务器程序学习笔记”中,我们将深入探讨这一主题,包括如何...

    JAVA利用HttpClient进行HTTPS接口调用

    在Java编程中,HttpClient是一个非常重要的库,常用于执行HTTP请求。当涉及到HTTPS接口调用时,HttpClient可以处理加密通信,确保数据传输的安全性。在这个主题中,我们将深入探讨如何在Java中使用HttpClient来实现...

    web service 客户端java例子

    本篇文章将详细探讨如何在Java环境中创建和使用Web服务客户端,以"weather"为例。 一、Web服务基础 Web服务通常通过SOAP(简单对象访问协议)或REST(Representational State Transfer)进行通信。SOAP是基于XML的...

Global site tag (gtag.js) - Google Analytics