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

须要的包,包可能多几个额外的,假设无用或者冲突删除就可以。httpclient是使用的是4.4.1的版本号:http://download.csdn.net/detail/myfmyfmyfmyf/8894191

1、无參数传递,以微信开发为例,后台訪问url连接获得所有的人员列表

  1. /**
  2. * 获取所有人员列表
  3. * @return
  4. */
  5. public JSONObject getAllEmployee(){
  6. //获取微信号
  7. String token=getTokenFromWx();
  8. String dep_root=ROOT_DEP;//跟部门树
  9. try {
  10. CloseableHttpClient httpclient = HttpClients.createDefault();
  11. HttpPost httpPost= new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/user/list?
  12.  
  13. access_token="+token+"&department_id="+dep_root+"&fetch_child="+FETCH_CHILD+"&status="+STATE);
  14. // Create a custom response handler
  15. ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
  16. //成功调用连接后。对返回数据进行的操作
  17. public JSONObject handleResponse(
  18. final HttpResponse response) throws ClientProtocolException, IOException {
  19. int status = response.getStatusLine().getStatusCode();
  20. if (status >= 200 && status < 300) {
  21. //获得调用成功后 返回的数据
  22. HttpEntity entity = response.getEntity();
  23. if(null!=entity){
  24. String result= EntityUtils.toString(entity);
  25. //依据字符串生成JSON对象
  26. JSONObject resultObj = JSONObject.fromObject(result);
  27. return resultObj;
  28. }else{
  29. return null;
  30. }
  31. } else {
  32. throw new ClientProtocolException("Unexpected response status: " + status);
  33. }
  34. }
  35.  
  36. };
  37. //返回的json对象
  38. JSONObject responseBody = httpclient.execute(httpPost, responseHandler);
  39. //System.out.println(responseBody);
  40. return responseBody;
  41. }catch (Exception e) {
  42. e.printStackTrace();
  43. return null;
  44. }
  45. }

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

  1. /**
  2. * 主动发送消息
  3. * @param mess
  4. * @return
  5. */
  6. public boolean sendReqMsg(ReqBaseMessage mess){
  7. //消息json格式
  8. String jsonContext=mess.toJsonStr();
  9. //System.out.println(jsonContext);
  10. //获得token
  11. String token=getTokenFromWx();
  12. boolean flag=false;
  13. try {
  14. CloseableHttpClient httpclient = HttpClients.createDefault();
  15. HttpPost httpPost= new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/message/send?
  16.  
  17. access_token="+token);
  18. //发送json格式的数据
  19. StringEntity myEntity = new StringEntity(jsonContext,
  20. ContentType.create("text/plain", "UTF-8"));
  21. //设置须要传递的数据
  22. httpPost.setEntity(myEntity);
  23. // Create a custom response handler
  24. ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
  25. //对訪问结果进行处理
  26. public JSONObject handleResponse(
  27. final HttpResponse response) throws ClientProtocolException, IOException {
  28. int status = response.getStatusLine().getStatusCode();
  29. if (status >= 200 && status < 300) {
  30. HttpEntity entity = response.getEntity();
  31. if(null!=entity){
  32. String result= EntityUtils.toString(entity);
  33. //依据字符串生成JSON对象
  34. JSONObject resultObj = JSONObject.fromObject(result);
  35. return resultObj;
  36. }else{
  37. return null;
  38. }
  39. } else {
  40. throw new ClientProtocolException("Unexpected response status: " + status);
  41. }
  42. }
  43.  
  44. };
  45. //返回的json对象
  46. JSONObject responseBody = httpclient.execute(httpPost, responseHandler);
  47. System.out.println(responseBody);
  48. int result= (Integer) responseBody.get("errcode");
  49. if(0==result){
  50. flag=true;
  51. }else{
  52. flag=false;
  53. }
  54. httpclient.close();
  55. } catch (Exception e) {
  56. // TODO Auto-generated catch block
  57. e.printStackTrace();
  58. }
  59. return flag;
  60. }

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

  1. /**
  2. * 文件上传到微信server
  3. * @param fileType 文件类型 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)
  4. * @param filePath 文件路径
  5. * @return JSONObject
  6. * @throws Exception
  7. */
  8. public JSONObject send(String fileType, String filePath) throws Exception {
  9. String result = null;
  10. File file = new File(filePath);
  11. if (!file.exists() || !file.isFile()) {
  12. throw new IOException("文件不存在");
  13. }
  14. String token=getTokenFromWx();
  15. /**
  16. * 第一部分
  17. */
  18. URL urlObj = new URL("https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token="+ token
  19. + "&type="+fileType+"");
  20.  
  21. HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
  22. con.setRequestMethod("POST"); // 以Post方式提交表单。默认get方式
  23. con.setDoInput(true);
  24. con.setDoOutput(true);
  25. con.setUseCaches(false); // post方式不能使用缓存
  26. // 设置请求头信息
  27. con.setRequestProperty("Connection", "Keep-Alive");
  28. con.setRequestProperty("Charset", "UTF-8");
  29. // 设置边界
  30. String BOUNDARY = "----------" + System.currentTimeMillis();
  31. con.setRequestProperty("Content-Type", "multipart/form-data; boundary="+ BOUNDARY);
  32. // 请求正文信息
  33. // 第一部分:
  34. StringBuilder sb = new StringBuilder();
  35. sb.append("--"); // 必须多两道线
  36. sb.append(BOUNDARY);
  37. sb.append("\r\n");
  38. sb.append("Content-Disposition: form-data;name=\"media\";filename=\""+ file.getName() + "\"\r\n");
  39. sb.append("Content-Type:application/octet-stream\r\n\r\n");
  40. byte[] head = sb.toString().getBytes("utf-8");
  41. // 获得输出流
  42. OutputStream out = new DataOutputStream(con.getOutputStream());
  43. // 输出表头
  44. out.write(head);
  45. // 文件正文部分
  46. // 把文件已流文件的方式 推入到url中
  47. DataInputStream in = new DataInputStream(new FileInputStream(file));
  48. int bytes = 0;
  49. byte[] bufferOut = new byte[1024];
  50. while ((bytes = in.read(bufferOut)) != -1) {
  51. out.write(bufferOut, 0, bytes);
  52. }
  53. in.close();
  54. // 结尾部分
  55. byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
  56. out.write(foot);
  57. out.flush();
  58. out.close();
  59. StringBuffer buffer = new StringBuffer();
  60. BufferedReader reader = null;
  61. try {
  62. // 定义BufferedReader输入流来读取URL的响应
  63. reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
  64. String line = null;
  65. while ((line = reader.readLine()) != null) {
  66. //System.out.println(line);
  67. buffer.append(line);
  68. }
  69. if(result==null){
  70. result = buffer.toString();
  71. }
  72. } catch (IOException e) {
  73. System.out.println("发送POST请求出现异常!
  74.  
  75. " + e);
  76. e.printStackTrace();
  77. throw new IOException("数据读取异常");
  78. } finally {
  79. if(reader!=null){
  80. reader.close();
  81. }
  82. }
  83. JSONObject jsonObj =JSONObject.fromObject(result);
  84. return jsonObj;
  85. }

java后台訪问url连接——HttpClients的更多相关文章

  1. JAVA訪问URL

    JAVA訪问URL: package Test; import java.io.BufferedReader; import java.io.IOException; import java.io.I ...

  2. 假设在本地搭一个server和mysql数据库环境,假设使用java来訪问数据库

    我们能够使用speedamp来搭一个server环境,能够在http://download.csdn.net/detail/baidu_nod/7630265下载 解压后无需安装直接能够使用.点击Sp ...

  3. java中訪问修饰符

    较之c++ 中 public,proctected, private 三种訪问控制, java多了默认訪问控制. java中四种訪问控制权限 简单描写叙述为一下四句: 1)private 仅本类可见 ...

  4. Java数据库訪问小结

    </pre>1.JDBC訪问方法</p><p></p><p>DBHelper类訪问数据库.Dao类写数据訪问,View类进行应用,初学实例图 ...

  5. Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录

    真的是太不easy了,曾经的时候在window server 2003上面搭建了一套asp+oracle的接口系统.就费了好大的劲儿,事实上那会迷迷瞪瞪的也不知道怎么的就弄好了,也懒得管了.OK,从昨 ...

  6. tomcat URL简写案例:模拟站点www.baidu.com的訪问

    tomcat URL简写案例:模拟站点  * 实际URL:http://www.baidu.com:8080/myweb/1.html  * 实际位置:F:\mywebapps\myweb\1.htm ...

  7. Java 訪问权限控制:你真的了解 protected keyword吗?

    摘要: 在一个类的内部,其成员(包含成员变量和成员方法)是否能被其它类所訪问,取决于该成员的修饰词:而一个类是否能被其它类所訪问,取决于该类的修饰词.Java的类成员訪问权限修饰词有四类:privat ...

  8. JAVA设计模式之 訪问者模式【Visitor Pattern】

    一.概述 訪问者模式是一种较为复杂的行为型设计模式,它包括訪问者和被訪问元素两个主要组成部分.这些被訪问的元素通常具有不同的类型,且不同的訪问者能够对它们进行不同的訪问操作.在使用訪问者模式时,被訪问 ...

  9. Nginx 訪问日志增长暴增出现尖刀的具体分析

    前言:          Nginx日志里面Mobileweb_access.log增长特别大.一天上百兆.将近100W的訪问记录.依照我们眼下的规模,热点用户才500个左右.就算人人用手机app訪问 ...

随机推荐

  1. ASP.net 前台页面通过ID获取控件

    asp.net的服务器控件的ID通常只能在服务器端很好的识别,客户端需要通过ClientID获得控件 1.通过js获得   var controlID = "<%=controlID. ...

  2. DataGrid 简单数据绑定实例1

    1.默认数据显示(自动显示列) 后台绑定 //DataGrid 数据绑定 dataGridOne.ItemsSource = _Context.Info.ToList(); 前台定义 <Data ...

  3. jQuery 文本框得失焦点应用

    一.文本框得失焦点一种是改变文本框的样式    得到焦点:               失去焦点: 二.文本框得失焦点另一种是改变文本框的值    得到焦点:     失去焦点:       三.jQ ...

  4. js 日期控件 可以显示为和历

    日期控件的js <!-- /** * Calendar * @param beginYear 1990 * @param endYear 2010 * @param language 0(zh_ ...

  5. java泛型方法

    Tool.java package cn.stat.p9.fanxing.demo; public class Tool<QQ> {//不确定类型时可以用泛型 private QQ q; ...

  6. 线段树hdu1754

    #include<iostream>#include<stdio.h>using namespace std;const int maxa=200005;int val[max ...

  7. 3月20日html(二) 图片热点,网页划分,表单

    1.图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. <img src=" usemap="map" name=" ...

  8. ie7 不兼容overflow:hidden;

    用overflow:hidden; 隐藏不需要显示的数据,在IE6\IE8都显示正常,但是在ie7中就是不起作用,万恶的IE7啊.后来加了一句position:relative; 好了... stat ...

  9. Android性能优化学习

    工作以来,越来越觉得性能优化的重要性,从技术角度,它甚至成了决定一个app成败的最关键因素.因此,特地花时间去学习专研性能优化的方法. 学习性能优化最便捷的方式便是研读别人有关性能优化的博客,然而网上 ...

  10. CCI_chapter 16 Low level

    16.5 Write a program to find whether a machine is big endian or little endian Big-Endian和Little-Endi ...