`
三里小龙
  • 浏览: 87596 次
  • 性别: Icon_minigender_1
  • 来自: 孝感
社区版块
存档分类
最新评论

HttpClient操作cookie简单示例

    博客分类:
  • Web
阅读更多

package org.sunnysolong.net;

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.net.URLEncoder;

 

import org.apache.commons.httpclient.Cookie;

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.GetMethod;

 

 

/**

 * Wap登录返回测试

* Title: JavaTech<br>

* Description: <br>

* Copyright: Copyright (c) 2011 <br>

* Create DateTime: Nov 14, 2011 8:55:24 PM <br>

* @author wangmeng

 */

public class WapQuery {

 

private static String URL_LINK = "http://192.168.1.147/t3/wap/index.php";

// http://192.168.1.147/t3/wap/index.php?mod=topic&code=myhome

// 转向URL:http://192.168.1.147:80/t3/wap/index.php

private static final HttpClient HTTP_CLIENT = new HttpClient();

private static Cookie[] cookies;

private static GetMethod login;

private static GetMethod home;

/**

* 输入流转换成字符串

* @param is: 输入流

* @return 字符串对象

*/

private static String InputStreamToString(InputStream is){

        BufferedReader reader = null;

        StringBuffer responseText = null;

        String readerText = null;

try {

reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));

responseText = new StringBuffer();

readerText = reader.readLine();

       while(readerText != null){

        responseText.append(readerText);

        responseText.append(System.getProperty("line.separator"));

        readerText = reader.readLine();

       }

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return responseText.toString();

}

/**

* 将cookie写入指定文件

* @param cookies: cookie

* @param fileName: 文件名

*/

private static void write(Cookie[] cookies, String fileName){

try {

String path = System.getProperty("user.home") + "\\" + fileName;

File file = new File(path);

BufferedWriter bw = new BufferedWriter(new FileWriter(file));

for(Cookie c : cookies){

bw.append(c.toString());

bw.append(System.getProperty("line.separator"));

}

bw.flush();

bw.close();

Runtime.getRuntime().exec("explorer " + path + "");

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 登录

*/

private static void login(){

try {

//指定链接设定请求方式

login = new GetMethod(URL_LINK);

//入参

NameValuePair mod = new NameValuePair("mod", "login");

NameValuePair code = new NameValuePair("code", "dologin");

NameValuePair username = new NameValuePair("username", URLEncoder.encode("wangli@qq.com", "UTF-8"));

NameValuePair password = new NameValuePair("password", URLEncoder.encode("123456", "UTF-8"));

NameValuePair iswap = new NameValuePair("iswap", "1");

NameValuePair cityID = new NameValuePair("cityID", URLEncoder.encode("755", "UTF-8"));

NameValuePair city = new NameValuePair("city", URLEncoder.encode("深圳", "UTF-8"));

NameValuePair[] params = new NameValuePair[]{mod, code, username, password, iswap, cityID, city};

//设参

       login.setQueryString(params);

       //禁用重定向

       login.setFollowRedirects(false);

       //执行请求并返回状态码

            int statusCode = HTTP_CLIENT.executeMethod(login);

         //转向URL:http://192.168.1.147:80/t3/wap/index.php

            if (statusCode != HttpStatus.SC_OK) {

                System.err.println("LOGIN_ERROR >>> " + login.getStatusLine());

            }

            System.out.println("LOGIN_RESPONSE >>>" + InputStreamToString(login.getResponseBodyAsStream()));

            //设定全局cookie

            cookies = HTTP_CLIENT.getState().getCookies();

            //记录cookie

            write(cookies, "login-cookie.txt");

} catch (UnsupportedEncodingException e) {

System.err.println("(LOGIN) " + e.getMessage());

} catch (HttpException e) {

System.err.println("(LOGIN) " + e.getMessage());

e.printStackTrace();

} catch (IOException e) {

System.err.println("(LOGIN) " + e.getMessage());

} finally{

//释放连接

login.releaseConnection();

}

 

}

/**

* 主页

*/

private static void home(){

        try {

         //指定链接设定请求方式

         home = new GetMethod(URL_LINK);

         //入参、设参

         home.setQueryString("mod=topic&code=myhome");

         //记录cookie

         write(HTTP_CLIENT.getState().getCookies(), "home-cookie.txt");

         //添加cookie

         HTTP_CLIENT.getState().addCookies(cookies);

         //执行请求并返回状态码

            int statusCode = HTTP_CLIENT.executeMethod(home);

            if (statusCode != HttpStatus.SC_OK) {

                System.err.println("HOME_ERROR >>>" + home.getStatusLine());

            }

            //再次记录cookie

            write(HTTP_CLIENT.getState().getCookies(), "access-cookie.txt");

            System.out.println("HOME_RESPONSE >>>" + InputStreamToString(home.getResponseBodyAsStream()));

        } catch (HttpException e) {

         System.err.println("(HOME) " + e.getMessage());

        } catch (IOException e) {

         System.err.println("(HOME) " + e.getMessage());

        } finally {

            home.releaseConnection();

        }

 

}

 

public static void main(String[] args) {

//登录

login();

//转向主页

home();

/**

* 说明:查看login-cookie.txt和home-cookie.txt中记录的cookie是否完全一致,是则表示会话信息保留完整。

* access-cookie.txt中记录的是第二次请求返回的cookie,用来与全局记录的cookie做信息对比。

*/

    }

 

}

0
1
分享到:
评论

相关推荐

    HttpClient 调用WebService示例

    HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java开发者中,用于执行HTTP...对于RESTful API,使用HttpClient则更为简单,只需构造合适的URL和请求体,然后按照HTTP方法(如GET、POST)进行操作即可。

    javaeye api [java httpclient版] 简单封装

    - HttpClient 支持 Cookie 管理,JavaEyeClient 可能会有相应的接口来处理服务器返回的 Cookie,如 `storeCookie(HttpResponse response)` 和 `addCookie(String name, String value)`。 通过这个简单的封装,...

    httpclient.jar包下载.zip

    以下是一个简单的示例,展示如何使用HttpClient发送GET请求: ```java import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import ...

    HttpClient使用示例教程

    以下是一个简单的使用示例: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache....

    httpClient

    在实际开发中,HttpClient还支持更复杂的功能,如Cookie管理、多线程处理、HTTPS安全连接、代理设置、自动重定向和认证等。HttpClient的灵活性和强大功能使其成为Java开发者处理HTTP通信的首选工具。 总之,...

    commons-httpclient-3.1 java API详细index格式文档

    1. 连接超时:`HttpClient`提供了设置连接建立、数据传输和响应超时的方法,通过`setConnectionTimeout()`、`setSoTimeout()`和`setTimeout()`。 2. 连接池管理:`MultiThreadedHttpConnectionManager`可以管理连接...

    【ASP.NET编程知识】.NET CORE HttpClient的使用方法.docx

    .NET CORE HttpClient 的使用方法 .NET CORE 中的 HttpClient 是一个非常重要的组件,它提供了一个强大且灵活的方式来发送 HTTP 请求。然而,在使用 HttpClient 时,我们需要注意一些重要的配置和使用方法,以避免...

    AndroidHttpClient详解及调用示例

    创建AndroidHttpClient对象非常简单,只需调用`AndroidHttpClient.newInstance(String userAgent)`,其中userAgent参数通常为空字符串。如果不需要设置代理,可以留空。例如: ```java AndroidHttpClient client = ...

    httpclient4.2.1.zip

    《HttpClient 4.2.1:Java开发中的HTTP通信利器》 在Java开发领域,HttpClient是一个广泛使用的库,...无论是简单的GET请求还是复杂的POST操作,HttpClient都能游刃有余,为Java应用程序的网络通信带来极大的便利。

    HttpClient4.5全部jar包+简单实例

    这个压缩包包含了HttpClient 4.5所需的全部jar包,以及一个简单的实例`PTXCheckTools.java`,方便用户快速理解和应用。 HttpClient库的核心功能包括: 1. **HTTP协议支持**:HttpClient支持HTTP/1.1和HTTP/2协议,...

    httpclient httpclient.jar

    注意,每次操作完成后,都需要关闭响应和HttpClient实例以释放资源。 HttpClient还支持更复杂的用法,如POST请求、文件上传、Cookie管理、HTTPS通信、自定义连接管理器等。通过深入学习HttpClient,你可以更灵活地...

    httpclient

    8. **响应头和实体处理**:HttpClient允许你检查和操作响应头,如设置编码、内容类型等。对于XML或JSON响应,你可以使用DOM或其他解析器(如JAXB或Jackson)将响应转换为Java对象。 9. **异步处理**:HttpClient也...

    httpClient帮助文档

    - **AsyncHttpClient**:HttpClient提供了异步操作的支持,可以通过Future和Callback接口处理非阻塞请求。 - **多线程处理**:HttpClient可以用于并发请求,通过ExecutorService调度请求任务。 7. **性能优化** ...

    httpClient包.rar

    2. **连接管理**:HttpClient允许开发者精细控制连接池,包括设置最大连接数、超时时间等,这对于处理大量并发请求非常有用。 3. **重试和恢复策略**:HttpClient提供了自动重试机制,当遇到网络临时问题时,它可以...

    httpclient4.1.2 jar包

    6. **异步操作**:除了传统的同步API,HttpClient 4.1.2还提供了异步操作接口,支持非阻塞I/O,适用于高并发场景。 三、HttpClient 4.1.2使用示例 创建HttpClient实例: ```java CloseableHttpClient httpClient =...

    httpclient模拟登陆具体实现(使用js设置cookie)

    根据提供的文件信息,我们可以详细探讨关于HttpClient模拟登录的实现方法,特别是在使用JavaScript设置Cookie的场景下。以下是一些关键知识点: ### HTTP客户端(HttpClient) - **HttpClient的基本概念:** ...

Global site tag (gtag.js) - Google Analytics