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. ListIterator add remove 使用注意

    add方法示例 //在最前面添加 List<String> list1 = new LinkedList<String>(Arrays.asList(new String[]  ...

  2. 正式进入C#的世界——委托

    委托(delegate)1.可以认为是这样的对象,它包含具有相同签名和返回值类型的有序方法列表.2.可以理解为函数的一个包装,它使得C#中的函数可以作为参数来被传递. 委托的定义和方法的定义类似,只是 ...

  3. 从JPG中获取缩略图

    using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sys ...

  4. hdu 2106

    #include <iostream> #include <cmath> #include <string.h> using namespace std; int ...

  5. linux的exec命令

    linux的exec命令可以多进程执行,如果在浏览器访问使用http协议,会存在内存溢出和执行时间问题.

  6. 'swap file "xx" exists' linux

    solution: 1)swap to another tty, kill processes using 'sudo kill -9 pid' 2)'Recover' the 'warn-openn ...

  7. 纯css实现slide效果

    尝试一下,仅作记录. <!DOCTYPE html><html><head><style>    *{transition:all 1s ease 0s ...

  8. YOU邮件

    include("class.phpmailer.php");include("class.smtp.php");//获取一个外部文件的内容$mail      ...

  9. jquery mobile 按钮部件(包含图标的使用)

    参考网址:http://api.jquerymobile.com/1.3/button/ 注:按钮的三种写法 <a href="#" class="ui-btn u ...

  10. 转载:Struts2.3.15.1升级总结

    转载网址:http://blog.csdn.net/amosryan/article/details/10350481 由于大家都懂的原因,涉struts2的项目需要将struts2相关包升级至2.3 ...