java后台访问url连接——HttpClients

来源:互联网 发布:pixiv软件怎么注册 编辑:程序博客网 时间:2024/05/19 11:36

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 blocke.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;      }


 

0 0
原创粉丝点击