一个HttpClient的试验

其中客户端类:

import java.io.IOException;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class TestClient {
   public static void main(String args[]) throws IOException{
     TestClient.doGet();
     System.out.println(" ");
     System.out.println(" ");
     System.out.println(" ");
     TestClient.doPost();
     System.out.println(" ");
     System.out.println(" ");
     System.out.println(" ");
     TestClient.doDelete();
   }
   /**
   * Get获取
   * SongWei
   */
   public static void doGet(){
     String url = "http://localhost:8080/FrameProject/ReturnMessage";
     //构造HttpClient的实例
     HttpClient httpClient = new HttpClient();
     //创建GET方法的实例
     GetMethod getMethod = new GetMethod(url);
     //使用系统提供的默认的恢复策略
     getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
         new DefaultHttpMethodRetryHandler());
     try {
       //执行getMethod
       int statusCode = httpClient.executeMethod(getMethod);
       if (statusCode != HttpStatus.SC_OK) {
         System.err.println("Method failed: "
             + getMethod.getStatusLine());
       }
       //读取内容
       byte[] responseBody = getMethod.getResponseBody();
       //处理内容
       System.out.println(new String(responseBody,"UTF-8"));
     } catch (HttpException e) {
       //发生致命的异常,可能是协议不对或者返回的内容有问题
       System.out.println("Please check your provided http address!");
       e.printStackTrace();
     } catch (IOException e) {
       //发生网络异常
       e.printStackTrace();
     } finally {
       //释放连接
       getMethod.releaseConnection();
     }
   }
   /**
   * Post获取
   * SongWei
   */
   public static void doPost() throws IOException{
     String url = "http://localhost:8080/FrameProject/ReturnMessage";
//    url="http://www.newsmth.net/bbslogin2.php";
     HttpClient httpClient = new HttpClient();
     PostMethod postMethod = new PostMethod(url);
     // 填入各个表单域的值
     NameValuePair[] data = { new NameValuePair("id", "youUserName"),
         new NameValuePair("passwd", "yourPwd") };
     // 将表单的值放入postMethod中
     postMethod.setRequestBody(data);
     // 执行postMethod
     int statusCode = httpClient.executeMethod(postMethod);
     System.out.println(statusCode);
     //读取内容
     byte[] responseBody = postMethod.getResponseBody();
     //处理内容
     System.out.println(new String(responseBody,"UTF-8"));
     // HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发301或者302
     if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY
         || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
       // 从头中取出转向的地址
       Header locationHeader = postMethod.getResponseHeader("location");
       String location = null;
       if (locationHeader != null) {
         location = locationHeader.getValue();
         System.out.println("The page was redirected to:" + location);
       } else {
         System.err.println("Location field value is null.");
       }
       return;
     }else{
       System.out.println("other");
     }
   }

   /**
   * Delete获取
   * SongWei
   */
   public static void doDelete(){
     String url = "http://localhost:8080/FrameProject/ReturnMessage";
     //构造HttpClient的实例
     HttpClient httpClient = new HttpClient();
     //创建GET方法的实例
     DeleteMethod deleteMethod = new DeleteMethod(url);
     //使用系统提供的默认的恢复策略
     deleteMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
         new DefaultHttpMethodRetryHandler());
     try {
       //执行getMethod
       int statusCode = httpClient.executeMethod(deleteMethod);
       if (statusCode != HttpStatus.SC_OK) {
         System.err.println("Method failed: "
             + deleteMethod.getStatusLine());
       }
       //读取内容
       byte[] responseBody = deleteMethod.getResponseBody();
       //处理内容
       System.out.println(new String(responseBody,"UTF-8"));
     } catch (HttpException e) {
       //发生致命的异常,可能是协议不对或者返回的内容有问题
       System.out.println("Please check your provided http address!");
       e.printStackTrace();
     } catch (IOException e) {
       //发生网络异常
       e.printStackTrace();
     } finally {
       //释放连接
       deleteMethod.releaseConnection();
     }
   }

}

时间: 2025-01-01 22:38:03

一个HttpClient的试验的相关文章

Cookies,SSL,httpclient的多线程处理,HTTP方法

client|cookie|cookies|多线程 - 作者 sunggsun @ 20:26 8.Cookies HttpClient能自动管理cookie,包括允许服务器设置cookie并在需要的时候自动将cookie返回服务器,它也支持手工设置cookie后发送到服务器端.不幸的是,对如何处理cookie,有几个规范互相冲突:Netscape Cookie 草案, RFC2109, RFC2965,而且还有很大数量的软件商的cookie实现不遵循任何规范. 为了处理这种状况,HttpCli

一个java类方法提取器

很少需要直接使用反射工具:之所以在语言中提供它们,仅仅是为了支持其他Java特性,比如对象序列化(第10章介绍).Java Beans以及RMI(本章后面介绍).但是,我们许多时候仍然需要动态提取与一个类有关的资料.其中特别有用的工具便是一个类方法提取器.正如前面指出的那样,若检视类定义源码或者联机文档,只能看到在那个类定义中被定义或覆盖的方法,基础类那里还有大量资料拿不到.幸运的是,"反射"做到了这一点,可用它写一个简单的工具,令其自动展示整个接口.下面便是具体的程序:   //:

Android开发实现HttpClient工具类

  在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务.你可以把HttpClient想象成一个浏览器,通过它的API我们可以很方便的发出GET,POST请求(当然它的功能远不止这些). 比如你只需以下几行代码就能发出一个简单的GET请求并打印响应结果: try { // 创建一个默认的HttpClient HttpClient httpclient = new DefaultHt

httpclient模拟登陆具体实现

 最简单的方法就是通过得到的cookie定制一个httpclient,感兴趣的朋友可以了解下本文 httpclient模拟登陆(使用js设置cookie)  代码如下: <html>  <meta http-equiv='Content-Type' content='text/html; charset=gb2312'>  <link rel=stylesheet type=text/css href='/bbs.css'>  <script>documen

.NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文件系统.总的来说,它们针对的都是"本地"文件,接下来我们通过自定义FileProvider构建一个"远程"文件系统,我们可以将它视为一个只读的"云盘".由于文件系统的目录结构和文件内容都是通过HTTP请求的方式读取的,所以我们将这个自定义的FileP

Apache HttpClient 没有设置time out导致应用长时间阻塞的问题

update 2014-5-18: 今天又处理了一个HttpClient阻塞的问题,还是socket read没有超时设置. 用jstack -l pid 得到线程的调用栈,每隔一段时间执行一次,对比三次的thread dump结果,发现有一个线程是三次执行的位置一样的,说明它是阻塞在这里了: "org.springframework.jms.listener.DefaultMessageListenerContainer#7-1" prio=10 tid=0x00007f345127

使用单例模式实现自己的HttpClient工具类

引子 在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务.你可以把HttpClient想象成一个浏览器,通过它的API我们可以很方便的发出GET,POST请求(当然它的功能远不止这些). 比如你只需以下几行代码就能发出一个简单的GET请求并打印响应结果: try { // 创建一个默认的HttpClient HttpClient httpclient =new DefaultHt

httpclient模拟登入 多用户登入并发操作怎么解决

问题描述 httpclient模拟登入 多用户登入并发操作怎么解决 .最近写了一个模拟登陆集大教务处获取成绩的页面,但是只能一个用户登入,如果另外一个用户登入了 ,前一个用户查出来的成绩就是后一个用户的. httpclient有提供相关策略吗? 该如何解决呢 万谢! 求不要告诉我带上cookie 我试过了 带上也没用 一个httpclient相当于一个浏览器 你第一个用户获取的cookie和第2个用户获取的cookie是一样的 谢谢~ 解决方案 可以禁用httpclient的保持会话的功能,自己

HttpClient超时机制(安全问题处理:访问超大文件控制)

背景      最近一直在做项目,其中的一个功能点,主要是访问外部网站并获取页面的字符串,具体的网站url完全是由用户输入,所以存在一定的安全隐患.     从测试来看,如果给定的一部电影的url地址,链接会一直不能被关闭,直到数据流被读完,如果来个几十次这样的请求,应用估计也差不多崩溃了   说明:   项目中使用的HttpClient版本是3.0.1 测试 一般的HttpClient使用例子: 1.MultiThreadedHttpConnectionManager manager = ne