Apache HttpComponents Client 4.0已经发布多时,httpclient项目从commons子项目挪到了HttpComponents子项目下,httpclient3.1和 httpcilent4.0无法做到代码向后兼容,升级比较麻烦。我在做项目之余找时间研究了一下,写了一套3.1与4.0对比的代码,不求面面俱到,但 求简单易懂。如果代码用到真实项目中,还需要考虑诸如代理、Header、异常处理之类的问题。

Http POST方法得到www.g.cn的源码:

  1. import java.io.IOException;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.apache.commons.httpclient.NameValuePair;
  5. import org.apache.commons.httpclient.methods.PostMethod;
  6. import org.apache.http.HttpEntity;
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.ParseException;
  9. import org.apache.http.client.entity.UrlEncodedFormEntity;
  10. import org.apache.http.client.methods.HttpPost;
  11. import org.apache.http.impl.client.DefaultHttpClient;
  12. import org.apache.http.message.BasicNameValuePair;
  13. import org.apache.http.protocol.HTTP;
  14. import org.apache.http.util.EntityUtils;
  15. public class PostSample {
  16. public static void main(String[] args) throws ParseException, IOException {
  17. String url = "http://www.g.cn/";
  18. System.out.println(url);
  19. System.out.println("Visit google using Apache commons-httpclient 3.1:");
  20. List<NameValuePair> data3 = new ArrayList<NameValuePair>();
  21. data3.add(new NameValuePair("username", "testuser"));
  22. data3.add(new NameValuePair("password", "testpassword"));
  23. System.out.println(post3(url, data3));
  24. System.out.println("Visit google using Apache HttpComponents Client 4.0:");
  25. List<BasicNameValuePair> data4 = new ArrayList<BasicNameValuePair>();
  26. data4.add(new BasicNameValuePair("username", "testuser"));
  27. data4.add(new BasicNameValuePair("password", "testpassword"));
  28. System.out.println(post4(url, data4));
  29. }
  30. /** 使用Apache commons-httpclient 3.1,POST方法访问网页 */
  31. public static String post3(String url, List<NameValuePair> data) throws IOException {
  32. org.apache.commons.httpclient.HttpClient httpClient = new org.apache.commons.httpclient.HttpClient();
  33. PostMethod postMethod = new PostMethod(url);
  34. postMethod.setRequestBody(data.toArray(new NameValuePair[data.size()]));
  35. try {
  36. System.out.println("<< Response: " + httpClient.executeMethod(postMethod));
  37. return postMethod.getResponseBodyAsString();
  38. } finally {
  39. postMethod.releaseConnection();
  40. }
  41. }
  42. /** 使用Apache HttpComponents Client 4.0,POST方法访问网页 */
  43. private static String post4(String url, List<? extends org.apache.http.NameValuePair> data)
  44. throws ParseException, IOException {
  45. org.apache.http.client.HttpClient client = new DefaultHttpClient();
  46. HttpPost httpost = new HttpPost(url);
  47. httpost.setEntity(new UrlEncodedFormEntity(data, HTTP.UTF_8));
  48. try {
  49. HttpResponse response = client.execute(httpost);
  50. HttpEntity entity = response.getEntity();
  51. System.out.println("<< Response: " + response.getStatusLine());
  52. if (entity != null) {
  53. return EntityUtils.toString(entity);
  54. }
  55. return null;
  56. } finally {
  57. client.getConnectionManager().shutdown();
  58. }
  59. }
  60. }

当然www.g.cn不必要通过post来访问,一般用于需要提交表单的情形。

Apache HttpComponents Client 4.0快速入门/升级-2.POST方法访问网页的更多相关文章

  1. python3.5+django2.0快速入门(二)

    昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...

  2. ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载

    ExtJS6.0+快速入门+API下载地址 ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用 ...

  3. python3.5+django2.0快速入门(一)

    因为这篇教程需要用到anaconda的一些操作,如果还不懂anaconda的操作的同学可以看下这篇文章python 入门学习之anaconda篇. 创建python3+的开发环境 直接在终端输入:co ...

  4. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...

  5. JAVA中使用Apache HttpComponents Client的进行GET/POST请求使用案例

    一.简述需求 平时我们需要在JAVA中进行GET.POST.PUT.DELETE等请求时,使用第三方jar包会比较简单.常用的工具包有: 1.https://github.com/kevinsawic ...

  6. Thinkphp5.0快速入门笔记(3)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 快速入门第三节 获取当前的请求 ...

  7. Thinkphp5.0快速入门笔记(2)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 示例建立新的模块和控制器 在a ...

  8. rancher2.0快速入门

    注意:本入门指南的目的是让您快速的运行一个Rancher2.0环境,它不适用于生产.有关更全面的说明,请查阅Rancher安装. 本教程将指导您完成: 安装Rancher v2.0 : 创建第一个集群 ...

  9. Thinkphp5.0快速入门笔记(1)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...

随机推荐

  1. Entity Framework Code First 多数据库 控制台迁移代码

    1.启动迁移 Enable Migrations Enable-Migrations -MigrationsDirectory "MigrationsOne" -ContextTy ...

  2. 趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

  3. Session深度探索

    什么是Session? web是无状态,这意味着每次页面被回传到服务器时,都重新生成一个web页面类的一个新的实例.众所周知http时无状态的协议.它不能获得客户端的信息.如果用户录入了一些信息,当跳 ...

  4. JNI类型与C/C++映射关系

    Java 类型 本地类型 描述 boolean jboolean C/C++8位整型 byte jbyte C/C++带符号的8位整型 char jchar C/C++无符号的16位整型 short ...

  5. MyEclipse汉化后问题

    今天为了教学生如何汉化MyEclipse10.7,所以讲IDE汉化了一下. 个人还是喜欢用英文版,所以就将D:\MyEclipse\MyEclipse 10目录下的配置文件myeclipse.ini里 ...

  6. 用CALayer实现淡入淡出的切换图片效果

    由于直接更改layer的contents显示的隐式动画切换的时候的动画持续时间没办法控制, 切换效果不尽人意,所以这里配合了CABasicAnimation实现淡入淡出的切换效果, 另外还可以使用组合 ...

  7. html5中的一些小知识点(CSS)

    1.点击a标签周围区域就可以进入超链接: a标签 的css样式中的 display属性设置为block 就可以了 2.文字左右居中: text-align 属性值为 center 3.文字上下居中:  ...

  8. cmd命名设置成全局

    如在jsdoc里.想要把jsdoc命名设置成全局.只要把环境变量里面的用户变量里面的path变量值增加 C:\Program Files\nodejs;E:\Program Files (x86)\j ...

  9. 删除MSMQ中的消息队列时"访问被拒绝的错误"

    删除MSMQ中消息队列时出现 google之,发现也没有找到解决方法,自己在琢磨一下,一般出现这种问题的都是权限问题,因此查看了一下属性,果然如此 此消息队列是使用Windows服务创建的 解决办法: ...

  10. Windows 中JDK安装配置教程

    1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的系统为多少位系统.右键计算机-属性查看,我安装的是64位 b.下载JDK,地址:http://www. ...