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做信息对比。
*/
}
}
分享到:
相关推荐
HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java开发者中,用于执行HTTP...对于RESTful API,使用HttpClient则更为简单,只需构造合适的URL和请求体,然后按照HTTP方法(如GET、POST)进行操作即可。
- HttpClient 支持 Cookie 管理,JavaEyeClient 可能会有相应的接口来处理服务器返回的 Cookie,如 `storeCookie(HttpResponse response)` 和 `addCookie(String name, String value)`。 通过这个简单的封装,...
以下是一个简单的示例,展示如何使用HttpClient发送GET请求: ```java import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import ...
以下是一个简单的使用示例: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache....
在实际开发中,HttpClient还支持更复杂的功能,如Cookie管理、多线程处理、HTTPS安全连接、代理设置、自动重定向和认证等。HttpClient的灵活性和强大功能使其成为Java开发者处理HTTP通信的首选工具。 总之,...
1. 连接超时:`HttpClient`提供了设置连接建立、数据传输和响应超时的方法,通过`setConnectionTimeout()`、`setSoTimeout()`和`setTimeout()`。 2. 连接池管理:`MultiThreadedHttpConnectionManager`可以管理连接...
.NET CORE HttpClient 的使用方法 .NET CORE 中的 HttpClient 是一个非常重要的组件,它提供了一个强大且灵活的方式来发送 HTTP 请求。然而,在使用 HttpClient 时,我们需要注意一些重要的配置和使用方法,以避免...
创建AndroidHttpClient对象非常简单,只需调用`AndroidHttpClient.newInstance(String userAgent)`,其中userAgent参数通常为空字符串。如果不需要设置代理,可以留空。例如: ```java AndroidHttpClient client = ...
《HttpClient 4.2.1:Java开发中的HTTP通信利器》 在Java开发领域,HttpClient是一个广泛使用的库,...无论是简单的GET请求还是复杂的POST操作,HttpClient都能游刃有余,为Java应用程序的网络通信带来极大的便利。
这个压缩包包含了HttpClient 4.5所需的全部jar包,以及一个简单的实例`PTXCheckTools.java`,方便用户快速理解和应用。 HttpClient库的核心功能包括: 1. **HTTP协议支持**:HttpClient支持HTTP/1.1和HTTP/2协议,...
注意,每次操作完成后,都需要关闭响应和HttpClient实例以释放资源。 HttpClient还支持更复杂的用法,如POST请求、文件上传、Cookie管理、HTTPS通信、自定义连接管理器等。通过深入学习HttpClient,你可以更灵活地...
8. **响应头和实体处理**:HttpClient允许你检查和操作响应头,如设置编码、内容类型等。对于XML或JSON响应,你可以使用DOM或其他解析器(如JAXB或Jackson)将响应转换为Java对象。 9. **异步处理**:HttpClient也...
- **AsyncHttpClient**:HttpClient提供了异步操作的支持,可以通过Future和Callback接口处理非阻塞请求。 - **多线程处理**:HttpClient可以用于并发请求,通过ExecutorService调度请求任务。 7. **性能优化** ...
2. **连接管理**:HttpClient允许开发者精细控制连接池,包括设置最大连接数、超时时间等,这对于处理大量并发请求非常有用。 3. **重试和恢复策略**:HttpClient提供了自动重试机制,当遇到网络临时问题时,它可以...
6. **异步操作**:除了传统的同步API,HttpClient 4.1.2还提供了异步操作接口,支持非阻塞I/O,适用于高并发场景。 三、HttpClient 4.1.2使用示例 创建HttpClient实例: ```java CloseableHttpClient httpClient =...
根据提供的文件信息,我们可以详细探讨关于HttpClient模拟登录的实现方法,特别是在使用JavaScript设置Cookie的场景下。以下是一些关键知识点: ### HTTP客户端(HttpClient) - **HttpClient的基本概念:** ...