httpClient_3.x版用法

/**
 *
 */
package me;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.lang3.StringUtils;

/**
 * Created by lzd on 2016年6月27日 上午9:47:36
 */
public class HttpClient_3x {

    public static void main(String[] args) throws Exception{
//        req();
//        isRedirect();
        loginReq();
    }

    //post or get request
    public static void req() throws Exception{
        HttpClient httpClient = new HttpClient();

//        配置代理
//        httpClient.getHostConfiguration().setProxy("127.0.0.1", 80);

//        PostMethod postMethod = new PostMethod("http://java.sun.com");

        GetMethod getMethod = new GetMethod("http://java.sun.com");

        int executeStatus = httpClient.executeMethod(getMethod);
        System.out.println(executeStatus);//成功返回200,应该是响应的状态码

//        打印返回的信息
        String responseBodyAsString = getMethod.getResponseBodyAsString();
        System.out.println(responseBodyAsString);

//        释放连接
        getMethod.releaseConnection();

    }

    //get or post append params

    private static GetMethod getGetMethod(){
        return new GetMethod("www.aa.com/a?key = 123");
    }

    private static PostMethod getPostMethod(){

        PostMethod postMethod = new PostMethod("www.aa.com/a");
        NameValuePair nameValuePair = new NameValuePair("key", "val");
        postMethod.setRequestBody(new NameValuePair[]{nameValuePair});
        return postMethod;
    }

//    检测是否重定向
//    301 SC_MOVED_PERMANENTLY 页面已经永久移到另外一个新地址
//    302 SC_MOVED_TEMPORARILY 页面暂时移动到另外一个新的地址
//    303 SC_SEE_OTHER 客户端请求的地址必须通过另外的 URL 来访问
//    307 SC_TEMPORARY_REDIRECT 同 SC_MOVED_TEMPORARILY

    public static void isRedirect() throws Exception{
        HttpClient httpClient = new HttpClient();
        GetMethod getMethod = new GetMethod("http://192.168.10.150/pdc/app/book/info/index.html");
        httpClient.executeMethod(getMethod);

        getMethod.releaseConnection();

        int statusCode = getMethod.getStatusCode();

        if(statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY
                || statusCode == HttpStatus.SC_SEE_OTHER
                || statusCode == HttpStatus.SC_TEMPORARY_REDIRECT){
            Header responseHeader = getMethod.getResponseHeader("location");
            if(responseHeader != null){
                String value = responseHeader.getValue();

                if(StringUtils.isNotEmpty(value)){
                    GetMethod method = new GetMethod(value);
                    httpClient.executeMethod(method);
                    //执行之后的操作
                }
            }
        }
    }

    /*
     * 模拟登录
     * 首先访问正常页面
     * 拿到返回的结果,判断是否让登录,如果让登录,就登录后再进。
     *
     *
     */
    public static void loginReq() throws Exception{
        String targetUrl = "/pdc/app/book/info/index.html";

        HttpClient httpClient = new HttpClient();
        httpClient.getHostConfiguration().setHost("192.168.10.150", 80);
        PostMethod postMethod = new PostMethod(targetUrl);
        httpClient.executeMethod(postMethod);
        postMethod.releaseConnection();

        int statusCode = postMethod.getStatusCode();

        if(statusCode == HttpStatus.SC_MOVED_PERMANENTLY
                || statusCode == HttpStatus.SC_MOVED_TEMPORARILY
                || statusCode == HttpStatus.SC_SEE_OTHER
                || statusCode == HttpStatus.SC_TEMPORARY_REDIRECT){
            Header responseHeader = postMethod.getResponseHeader("location");

            if (responseHeader != null){
                String value = responseHeader.getValue();
                System.out.println("redirect location = "+value);
                if(StringUtils.isNotEmpty(value) && value.indexOf("login") != -1){
                    NameValuePair name = new NameValuePair("userName","admin");
                    NameValuePair pwd = new NameValuePair("pwd","admin");

                    PostMethod loginMethod = new PostMethod("/pdc/userLogin.html");
                    loginMethod.setRequestBody(new NameValuePair[]{name,pwd});

                    httpClient.executeMethod(loginMethod);
                    loginMethod.releaseConnection();

                    /**  得到cookie的方法
                    Cookie[] cookies = httpClient.getState().getCookies();
                    System.out.println("----------------------------cookie start ------------------------------------------");
                    for (Cookie cookie : cookies) {
                        System.out.println(cookie);
                    }
                    System.out.println("----------------------------------------------------------------------");
                    Header[] headerCookies = postMethod.getResponseHeaders("Set-cookie");
                    for (Header header : headerCookies) {
                        System.out.println(header);
                    }
                    System.out.println("----------------------------cookie end------------------------------------------");
                     */

                    GetMethod tarGetMethod = new GetMethod(targetUrl);
                    httpClient.executeMethod(tarGetMethod);
                    System.out.println(tarGetMethod.getResponseBodyAsString());
                    tarGetMethod.releaseConnection();
                }
            } else {
                System.out.println("invalid redirect");
            }
        } else {
            System.out.println(postMethod.getResponseBodyAsString());
        }
    }

    //多线程下访问httpclient(同一个站点),只需要在实例化httpclient时传入MultiThreadedHttpConnectionManager即可
    public static void getHttpClient(){
        MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();

        HttpClient client = new HttpClient(connectionManager);
    }

}

//通过http上传文件、提交xml格式数据的例子请看原文地址
//http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html
时间: 2024-11-10 14:07:48

httpClient_3.x版用法的相关文章

httpClient_4.x版用法

package me; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.util.Date; import java.util.concurrent.ExecutionExceptio

Python游戏引擎开发(一):序

邂逅Python 写了这么久的html5,感觉html5学得差不多了,是时候去接触更多的语言来扩充自己的能力了.我先后看了Swift,Java等语言.首先开发Swift需要一台mac,对于我这个寒士而言,过于奢华了一些:Java吧,又感觉太胖了,不够苗条,身材不好,也看不上.最后遇到了Miss Python,先前也和她打过交道,不过感觉语法怪怪的,总是出现>>>这类符号(当时没有深入接触,不晓得是命令输入提示),实在是太高冷了.幸好遇见了廖雪峰大侠,在他的引荐下,我开始初步了解Pytho

集合框架List之Vector和LinkedList

Vector对于add get 迭代器iterator有特有的老版用法,但是过时了,还是用新版的 基本的存储遍历跟arraylist差不多 LinkedList的特有功能 addFirst addLast getFirst getLast removeFirst removeLast LinkedList link=new LinkedList(); link.add("hello"); link.add("java"); link.add("lc&quo

ng2-timesheet, 一个timesheet.js的angular2复制版

一个 timesheet.js (JavaScript library for HTML5 & CSS3 time sheets) 的 Angular 2 复制版 用法: npm install ng2-timesheet --save app.component.ts // import Models and Component import { TimesheetItem } from 'ng2-timesheet/src/models/timesheet-item'; import { T

Mysql对空间数据库的支持及使用Hibernate Spatial对空间数据的持久化操作

1.空间数据:如果做地图方面的开发,那么对空间数据肯定不会陌生,也就是地图元素即,点,线,图形,它们有x,y坐标的信息 2.MySQL对于空间数据库本身就是支持的,只是支持的不太全面,实际上专业空间数据库非postgis莫属,之所以使用Mysql是因为项目中的数据库已经使用了它,而且对于地图方面的功能并不是很高,所以才有了这样的应该场景:使用MySQL做空间数据库,对于MySQL的空间数据库的操作,参见MySQL使用手册第19章中有详细的说明使用各空间函数的使用sql语句 3.Hibernate

RNA-Seq基因组比对工具HISAT2

原文网址: http://blog.biochen.com/archives/337 HISAT2是TopHat2/Bowti2的继任者,使用改进的BWT算法,实现了更快的速度和更少的资源占用,作者推荐TopHat2/Bowti2和HISAT的用户转换到HISAT2.官网:https://ccb.jhu.edu/software/hisat2/index.shtml HISAT2安装 下载HISAT2-2.0.1,并解压: unzip hisat2-2.0.1-beta-Linux_x86_64

MySQL replace into 用法(insert into 的增强版)

MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果存在,则更新. 在 SQL Server 中可以这样处理: if not exists (select 1 from t where id = 1) insert into t(id, update_time) values(1, getdate()) else update t set update_time

javaEE:day6-requset和response用法、表单参数的接受、文件手动上传(简易版)

通过<%=request.getContextPath() %> 可以将项目名写活,这样,即使项目名变了,仍可以运行. request代码每一次请求的容器.浏览器每次请求都是一个新的request对象.因此放在request里面的属性request.getAttribute()是空的,上一个request放的属性request.setAttribute() 是上一个的.与这次无关.但如果是转发的时候,那么request对象是共享的.这种情况下,两次的request是同一个.这种情况下,里面的属

UNIX环境高级编程(第三版)关于apue.h的用法

UNIX环境高级编程(第三版)中的例子用到apue.h这个头文件,但是书里面写的地址已经不能访问. 经过一番查找之后,找到如下解决方案: 1.到www.apuebook.com上下载第2版的源码,也可以直接点这里. 2.下载后的源码,需要修改一下: 1.Make.defines.linux中第6行WKDIR=/home/sar/apue.2e更改为目录的绝对路径. 2.apue.2e/ipp/ipp.h中第122行中的status换为Status.(也可换为其他,但要与下面对应) 3.apue.