java后台访问url连接——HttpClients

java后台访问url,并传递数据——通过httpclient方式

需要的包,包可能多几个额外的,如果无用或者冲突删除即可,httpclient是使用的是4.4.1的版本:http://download.csdn.net/detail/myfmyfmyfmyf/8894191

1、无参数传递,以微信开发为例,后台访问url连接获得全部的人员列表

	/**
	 * 获取全部人员列表
	 * @return
	 */
    public  JSONObject getAllEmployee(){
    	//获取微信号
    	String token=getTokenFromWx();
    	 String dep_root=ROOT_DEP;//跟部门树
		 try {
			 CloseableHttpClient httpclient = HttpClients.createDefault();
			 HttpPost httpPost= new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token="+token+"&department_id="+dep_root+"&fetch_child="+FETCH_CHILD+"&status="+STATE);
			 // Create a custom response handler
			 ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
				//成功调用连接后,对返回数据进行的操作
                public JSONObject handleResponse(
                        final HttpResponse response) throws ClientProtocolException, IOException {
                    int status = response.getStatusLine().getStatusCode();
                    if (status >= 200 && status < 300) {
                    	//获得调用成功后  返回的数据
                        HttpEntity entity = response.getEntity();
                        if(null!=entity){
                        	String result= EntityUtils.toString(entity);
                            //根据字符串生成JSON对象
                   		 	JSONObject resultObj = JSONObject.fromObject(result);
                   		 	return resultObj;
                        }else{
                        	return null;
                        }
                    } else {
                        throw new ClientProtocolException("Unexpected response status: " + status);
                    }
                }

            };
          //返回的json对象
            JSONObject responseBody = httpclient.execute(httpPost, responseHandler);
            //System.out.println(responseBody);
            return responseBody;
		 }catch (Exception e) {
			e.printStackTrace();
			return null;
		}
    }

2、有参数传递,以微信开发为例,后台访问url主动发送消息(json数据),httpClient通过设置StringEntity对象传递

/**
  	 * 主动发送消息
  	 * @param mess
  	 * @return
  	 */
  	public  boolean sendReqMsg(ReqBaseMessage mess){
  		//消息json格式
  		String jsonContext=mess.toJsonStr();
  		//System.out.println(jsonContext);
  		//获得token
  		String token=getTokenFromWx();
		 boolean flag=false;
		 try {
			 CloseableHttpClient httpclient = HttpClients.createDefault();
			 HttpPost httpPost= new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+token);
			 //发送json格式的数据
			 StringEntity myEntity = new StringEntity(jsonContext,
					   ContentType.create("text/plain", "UTF-8"));
			 //设置需要传递的数据
			 httpPost.setEntity(myEntity);
			 // Create a custom response handler
            ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
            	//对访问结果进行处理
                public JSONObject handleResponse(
                        final HttpResponse response) throws ClientProtocolException, IOException {
                    int status = response.getStatusLine().getStatusCode();
                    if (status >= 200 && status < 300) {
                        HttpEntity entity = response.getEntity();
                        if(null!=entity){
                        	String result= EntityUtils.toString(entity);
                            //根据字符串生成JSON对象
                   		 	JSONObject resultObj = JSONObject.fromObject(result);
                   		 	return resultObj;
                        }else{
                        	return null;
                        }
                    } else {
                        throw new ClientProtocolException("Unexpected response status: " + status);
                    }
                }

            };
          //返回的json对象
            JSONObject responseBody = httpclient.execute(httpPost, responseHandler);
            System.out.println(responseBody);
            int result= (Integer) responseBody.get("errcode");
            if(0==result){
            	flag=true;
            }else{
            	flag=false;
            }
			httpclient.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 return flag;
	}

3、传递图片、文件等媒体信息,还是以微信开发为例

/**
     * 文件上传到微信服务器
     * @param fileType 文件类型 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)
     * @param filePath 文件路径
     * @return JSONObject
     * @throws Exception
     */
    public  JSONObject send(String fileType, String filePath) throws Exception {
        String result = null;
        File file = new File(filePath);
        if (!file.exists() || !file.isFile()) {
            throw new IOException("文件不存在");
        }
        String token=getTokenFromWx();
        /**
        * 第一部分
        */
        URL urlObj = new URL("https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token="+ token
        		+ "&type="+fileType+""); 

        HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
        con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setUseCaches(false); // post方式不能使用缓存
        // 设置请求头信息
        con.setRequestProperty("Connection", "Keep-Alive");
        con.setRequestProperty("Charset", "UTF-8");
        // 设置边界
        String BOUNDARY = "----------" + System.currentTimeMillis();
        con.setRequestProperty("Content-Type", "multipart/form-data; boundary="+ BOUNDARY);
        // 请求正文信息
        // 第一部分:
        StringBuilder sb = new StringBuilder();
        sb.append("--"); // 必须多两道线
        sb.append(BOUNDARY);
        sb.append("\r\n");
        sb.append("Content-Disposition: form-data;name=\"media\";filename=\""+ file.getName() + "\"\r\n");
        sb.append("Content-Type:application/octet-stream\r\n\r\n");
        byte[] head = sb.toString().getBytes("utf-8");
        // 获得输出流
        OutputStream out = new DataOutputStream(con.getOutputStream());
        // 输出表头
        out.write(head);
        // 文件正文部分
        // 把文件已流文件的方式 推入到url中
        DataInputStream in = new DataInputStream(new FileInputStream(file));
        int bytes = 0;
        byte[] bufferOut = new byte[1024];
        while ((bytes = in.read(bufferOut)) != -1) {
        out.write(bufferOut, 0, bytes);
        }
        in.close();
        // 结尾部分
        byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
        out.write(foot);
        out.flush();
        out.close();
        StringBuffer buffer = new StringBuffer();
        BufferedReader reader = null;
        try {
        // 定义BufferedReader输入流来读取URL的响应
        reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String line = null;
        while ((line = reader.readLine()) != null) {
        //System.out.println(line);
        buffer.append(line);
        }
        if(result==null){
        result = buffer.toString();
        }
        } catch (IOException e) {
        System.out.println("发送POST请求出现异常!" + e);
        e.printStackTrace();
        throw new IOException("数据读取异常");
        } finally {
        if(reader!=null){
        reader.close();
        }
        }
        JSONObject jsonObj =JSONObject.fromObject(result);
        return jsonObj;
    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-07 02:43:34

java后台访问url连接——HttpClients的相关文章

java后台调用url

QXOutStream outPut= new QXOutStream(); qxWorkSheetXML.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); qxWorkSheetXML.append("<ROOT><ROW>"); qxWorkSheetXML.append("<REPORT_MAN>"

Java如何获取URL连接的日期?

Java编程中,如何获取URL连接的日期? 以下示例演示如何使用HttpURLConnection类的httpCon.getDate()方法获取URL连接的日期. package com.yiibai; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; public class URLConnectionDate { p

JAVA类访问URL

URI uri = new URI("https://www.baidu.com/");        Desktop desktop = null;        if (Desktop.isDesktopSupported()) {         desktop = Desktop.getDesktop();        }        if (desktop != null)         desktop.browse(uri);       } catch (IOExc

JAVA中三种URL连接方法

Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们通过使用Java的URL类就可以经由URL完成读取和修改数据的操作.现在,我们来看一看,如何才能发挥出URL类的效力. 通过URL进行工作 通过一个URL连接,我们就可以确定资源的位置,比如网络文件.网络页面以及网络应用程序等.其中包含了许多的语法元素.举个例子来说,请看下面这个URL连接: http

JAVA访问URL

JAVA访问URL: package Test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import java.

【新技术】现在最流行的java后台框架组合java springmvc mybaits mysql oracle html5 后台框架源码

升级报捷:通过服务于服务之间调用,生成二维码,可直接用户手机app(详细查看截图) 框架集成lucene搜索引擎,使您的信息在毫秒内抓取(详细查看截图) 1.  创建.初始化索引.统一搜索入口.搜索结果展现--内容.标题高亮.关键词搜索 2.  高级搜索:高级搜索增加多入口查询(精确查询.模糊查询.前缀查询等),每页显示条数自定义.索引结果数据设置.选择索引文档类型等 3. 通过A系统调用B系统的Rest服务,生成相关的二维码,可以直接用户手机app ----------------------

jQuery和java后台的jsonp跨域问题

Jsonp原理: ajax本身是不可以跨域的,通过产生一个script标签来实现跨域.因为script标签的src属性是没有跨域的限制的.其实设置了dataType: 'jsonp'后,$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议.JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问. JSONP是一种脚本注入(Script Injection)行

IOS 基于APNS消息推送原理与实现(JAVA后台)--转

Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 上图可以分为三个阶段. 第一阶段:Push服务器应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的

转:IOS 基于APNS消息推送原理与实现(JAVA后台)

Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 上图可以分为三个阶段. 第一阶段:Push服务器应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的