- 浏览: 271718 次
- 性别:
- 来自: 黑龙江省
文章分类
最新评论
-
leipan19890705:
AS调用JS里的呢?有没有?我的一直不成功。
JavaScript与ActionScript交互简单实例 -
newLinuxJava:
补充一下,windows7 日志配置文件的位置:Microso ...
Flex debug环境构建 -
ye_wx:
要加哪些jar包呢?麻烦列出来行吗
Java---POI--操作PPT -
brightACE:
不错,学习了
JavaScript与ActionScript交互简单实例 -
se7en8974:
留个言,回去看看。
推荐一个学习Flex chart的好网站
使用HttpClient模拟网站登陆sina邮箱(保持远程服务器session和cookie) (转载)
http://www.cnblogs.com/yesun/archive/2007/09/23/903319.html
/**
* 通过URL取得网页内容
*/
private void HttpRequestURL()
{
String postData = "";
if(_tc.getPostData()!=null && !_tc.getPostData().equals(""))
{
postData = _tc.getPostData();
}
if(_tc.getPostMethod()==null || _tc.getPostMethod().equals(""))
_tc.setPostMethod("GET");
String postUrl = _tc.getUrl();
if(_tc.getPostMethod().toUpperCase().equals("GET") && !postData.equals(""))
{
if(postUrl.indexOf("?") > -1)
postUrl += "&"+postData;
else
postUrl += "?"+postData;
}
System.out.println("--------Transfer Start------------------------------------------------------------------");
System.out.println(" 页面解析准备就绪...");
System.out.println(" Url:"+postUrl);
System.out.println(" PostData:"+postData);
System.out.println(" PostMethod:"+_tc.getPostMethod());
System.out.println(" Encoding:"+_tc.getEncoding());
System.out.println("--------------------------------------------------------------------------------------");
HttpClient httpClient = new HttpClient();
if(_tc.getPostMethod().toUpperCase().equals("GET"))
{
if(!postData.equals(""))
{
if(postUrl.indexOf("?") > -1)
postUrl += "&"+postData;
else
postUrl += "?"+postData;
}
GetMethod getHC = new GetMethod(postUrl);
getHC.setFollowRedirects(false);
getHC.getParams().setHttpElementCharset("UTF-8");
//发送Cookie
StringBuilder cookieValue = new StringBuilder();
for(String key : this.cookie.keySet()){
cookieValue.append(key);
cookieValue.append("=");
cookieValue.append(this.cookie.get(key));
cookieValue.append("; ");
}
getHC.setRequestHeader("Cookie", cookieValue.toString());
getHC.setRequestHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
int statusCode;
try {
statusCode = httpClient.executeMethod(getHC);
Header[] headers = getHC.getResponseHeaders();
for(Header header : headers){
if(header.getElements().length > 1){
HeaderElement[] elements = header.getElements();
for(HeaderElement element : elements){
checkCookie(element);
}
}
else
{
checkCookie(header);
}
}
if(statusCode==HttpStatus.SC_OK){
String charset = "utf-8";
if(_tc.getEncoding() == GB2312)
charset = "gb2312";
else if(_tc.getEncoding() == UTF8)
charset = "utf-8";
else if(_tc.getEncoding() == BIG5)
charset = "big5";
else
charset = "utf-8";
System.out.println("charset : " + charset);
InputStreamReader isr = new
InputStreamReader(getHC.getResponseBodyAsStream(), charset); //
设置读取流的编码格式,自定义编码
// 使用字符读取方式,循环读取源文件内容
StringBuffer sb = new StringBuffer();
int b ;
while ((b = isr.read()) != -1)//顺序读取文件text里的内容并赋值给整型变量b,直到文件结束为止。
{
if (b < 32 && b!= 10 && b != 13 && b != 9) b = 32;//过滤掉一些换行等符号
//if ( b== 10 || b== 13 || b== 9) b = 32;//过滤掉一些换行等符号
sb.append((char)b);
}
isr.close();
getHC.abort();
//取得采集的内容
_content = sb.toString();
//System.out.println("content : "+_content);
}
else
{
if(statusCode == 301 || statusCode == 302){
Header locationHeader = getHC.getResponseHeader("location");
_tc.setUrl(locationHeader.getValue());
_tc.setPostData("");
_tc.setPostMethod("GET");
HttpRequestURL();//重新请求新网页
}
}
} catch (HttpException e2) {
e2.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
}
else
{
PostMethod postHC = new PostMethod(postUrl);
postHC.setFollowRedirects(false);
postHC.getParams().setHttpElementCharset("UTF-8");
//发送Cookie
StringBuilder cookieValue = new StringBuilder();
for(String key : this.cookie.keySet()){
cookieValue.append(key);
cookieValue.append("=");
cookieValue.append(this.cookie.get(key));
cookieValue.append("; ");
}
postHC.setRequestHeader("Cookie", cookieValue.toString());
postHC.setRequestHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
//post数据到服务器
if(postData!=null && !postData.equals("")){
HashMap<String,String> argv = new HashMap<String,String>();
String[] arrParams = postData.split("&");
for(int i=0;i<arrParams.length;i++){
if(arrParams[i] == null || arrParams[i].equals(""))
{
continue;
}
else if(arrParams[i].indexOf("=") > -1)
{
String[] nameValue = arrParams[i].split("=");
if(nameValue.length > 1)
argv.put(nameValue[0], nameValue[1]);
}
}
if(argv!=null){
NameValuePair[] nameValuePair = new NameValuePair[argv.size()];
int i = 0;
for(String key : argv.keySet()){
nameValuePair[i] = new NameValuePair(key, argv.get(key));
i++;
}
postHC.setRequestBody(nameValuePair);
}
}
int statusCode;
try {
statusCode = httpClient.executeMethod(postHC);
Header[] headers = postHC.getResponseHeaders();
for(Header header : headers){
if(header.getElements().length > 1){
HeaderElement[] elements = header.getElements();
for(HeaderElement element : elements){
checkCookie(element);
}
}
else
{
checkCookie(header);
}
}
if(statusCode==HttpStatus.SC_OK){
String charset = "utf-8";
if(_tc.getEncoding() == GB2312)
charset = "gb2312";
else if(_tc.getEncoding() == UTF8)
charset = "utf-8";
else if(_tc.getEncoding() == BIG5)
charset = "big5";
else
charset = "utf-8";
InputStreamReader isr = new
InputStreamReader(postHC.getResponseBodyAsStream(), charset); //
设置读取流的编码格式,自定义编码
// 使用字符读取方式,循环读取源文件内容
StringBuffer sb = new StringBuffer();
int b ;
while ((b = isr.read()) != -1)//顺序读取文件text里的内容并赋值给整型变量b,直到文件结束为止。
{
if (b < 32 && b!= 10 && b != 13 && b != 9) b = 32;//过滤掉一些换行等符号
//if ( b== 10 || b== 13 || b== 9) b = 32;//过滤掉一些换行等符号
sb.append((char)b);
}
isr.close();
postHC.abort();
//取得采集的内容
_content = sb.toString();
}
else
{
if(statusCode == 301 || statusCode == 302){
Header locationHeader = postHC.getResponseHeader("location");
_tc.setUrl(locationHeader.getValue());
_tc.setPostData("");
_tc.setPostMethod("GET");
HttpRequestURL();//重新请求新网页
}
}
} catch (HttpException e2) {
e2.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
private void checkCookie(NameValuePair entry){
if(entry.getName().equals("Set-Cookie")){
//这个就是Cookie了
String value = entry.getValue();
if(value.indexOf(";") >0 )
value = value.substring(0,value.indexOf(";"));
System.out.println(entry.toString());
String[] cookieNameValuePair = value.split("=");
if(cookieNameValuePair.length > 1){
if(cookieNameValuePair[1].equals("deleted")){
this.cookie.remove(cookieNameValuePair[0]);
}
else
{
this.cookie.put(cookieNameValuePair[0], cookieNameValuePair[1]);
}
}
else
{
this.cookie.remove(cookieNameValuePair[0]);
}
}
}
发表评论
-
myeclipse8.5 运行程序报错 java.lang.OutOfMemoryError
2012-04-11 20:21 1081myeclipse8.5 运行程序报错 java.lang. ... -
权限管理模型
2012-01-10 17:24 1216转载来源http://www.cnblo ... -
【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图
2012-01-10 16:52 6542转自 http://www.cnblogs.com/ ... -
查看mysql 连接数
2011-07-20 14:47 14011、查看当前所有连接的详细资料: mysqladmin -u ... -
tomcat5.5如何修改分配给Java虚拟机的内存
2011-07-04 11:07 1646tomcat5.5如何修改分配给Java虚拟机的内存 ... -
tomcat实现SSL配置
2011-06-27 15:27 1125tomcat实现SSL配置 编辑tomcat的配置文件serv ... -
SQL 左外连接,右外连接,全连接,内连接
2011-06-26 11:11 1867SQL 左外连接,右外连接,全连接,内连接 ... -
dwr实现文件的下载--已经解决中文文件名乱码问题
2011-06-12 19:49 4201package com.wabacusdemo.u ... -
openflashchartdemo
2012-02-16 21:56 1028openflashchartdemo -
Apache HttpClient模拟登录
2011-01-17 21:46 2033Apache HttpClient模拟登录 Http ... -
HttpClient的使用
2011-01-17 21:44 1039HttpClient 简介 HTTP 协议可能是现在 ... -
HTMLParser使用详解
2011-01-17 11:20 1735HTMLParser 使用详解 HT ... -
servlet利用filter实现登录过滤
2010-09-03 00:30 1279登录过滤类loginFilter----- ... -
log 4j配置详解
2010-08-06 01:00 1515web.xml中的配置 <!-- 以下是配置lo ... -
java 操作excel
2010-07-31 23:13 8211 从Excel文件读取数据 ... -
Java通用权限控制算法(转)
2010-06-20 22:48 1015转摘 一种常用的权限控制算法的实现,参考LIN ... -
Java---POI--操作PPT
2010-06-19 18:24 3494一, 解析PPT文件中的图片 Java代码 ... -
js写的日期控件
2009-03-19 02:44 885http://www.my97.net/dp/demo/ -
mysql添加新用户并且分配权限
2009-03-07 00:13 1276bin>mysql -u rootmysql> g ... -
MySql 数据的备份与恢复
2009-02-16 18:27 996window mysql命令 前提:通过cmd进入dos,进 ...
相关推荐
为了保持SESSION状态,我们需要处理服务器返回的Cookie,并在后续请求中发送回去。以下是一个基本步骤: 1. **创建HttpClient实例**:首先,创建一个HttpClient实例,可以使用`HttpClients.createDefault()`或者...
本文将详细讲解如何使用HTTPClient来保持session会话,从而实现模拟登录后的其他操作。 首先,理解session的概念至关重要。Session是服务器端用来跟踪用户状态的一种机制。在Web应用中,当用户登录后,服务器会为该...
在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站的过程,获取登录后的session信息,以便后续能够访问登录后才能看到的页面内容。以下将详细介绍如何使用Java HttpClient进行...
在这个场景中,我们关注的是如何使用`httpclient`进行模拟登录并携带cookie来访问后续的URL。这个过程通常涉及到处理session和身份验证,对于开发需要登录功能的Web应用或自动化测试脚本尤其有用。 首先,`...
本文将深入探讨如何使用Java中的HttpClient4库来实现对新浪和腾讯微博的模拟登录。HttpClient4是一个强大的HTTP客户端库,它允许开发者执行HTTP请求并处理响应,非常适合进行网页交互。 首先,我们来看`Sina.java`...
本主题将深入探讨如何使用HttpClient4库进行百度和58同城的模拟登陆操作。HttpClient4是一个强大的Java库,它提供了丰富的功能来执行HTTP请求,非常适合进行网页交互。 首先,我们来了解HttpClient4的基本用法。...
在实际应用中,模拟登录可能涉及到更复杂的情况,如验证码处理、保持登录状态(通过Cookie或Session)、处理重定向等。HttpClient提供了丰富的接口和策略类,使得这些操作变得相对简单。 通过阅读和理解HttpClient...
在本实例中,我们将探讨如何使用HttpClient库来模拟登录网站,获取用户信息,以及处理带有验证码的登录场景。 首先,我们需要理解HttpClient的基本使用。HttpClient的核心类包括HttpClient本身,HttpGet、HttpPost...
登录成功后,服务器会返回一些关键的标识,如Session ID或Cookie,这些标识用于后续的会话保持。 三、HTTP请求构造 使用HTTPClient构建登录请求时,需要创建`HttpPost`对象,设置目标URL为淘宝的登录接口。然后,...
Jsoup+httpclient模拟登陆和抓取页面.pdf
1. 保持会话:登录成功后,服务器通常会返回一个session cookie。在后续的请求中,我们需要把这个cookie添加到请求头中,以保持会话: ```java Header[] cookies = response.getAllHeaders(); for (Header cookie...
字符集使用UTF-8编码,数据通讯统一采用 HTTP 协议通讯,使用POST 方法请求并传递参数。 POST请求Content-Type 设置为application/x-www-form-urlencoded 除此之外,我们对请求添加签名的校验,key设置为X-Sign 接口...
在阅读博文《HttpClient模拟登陆》时,可以深入学习如何解决这些具体问题,并查看示例代码以获得更详细的实现细节。 标签“源码”意味着你需要关注底层的工作原理,而“工具”标签则暗示HttpClient作为一个实用工具...
- 在Java程序中使用Jsoup和HttpClient来模拟登录一个网站并抓取页面内容。 - 案例中包含了登录、页面访问、内容抽取、页面修改和保存到本地等步骤,展示了完整的操作流程。 9. HTTP请求参数设置: - 设置HTTP...
### HTTPClient 模拟登录详解 #### 一、概述 HTTPClient是Apache组织下的一个开源项目,它提供了功能丰富的HTTP客户端开发工具包,可以用来发送HTTP请求并接收响应。利用HTTPClient,我们可以轻松实现模拟登录的...
本篇文章将深入探讨如何使用HttpClient来模拟表单提交。 表单提交通常是用户在网页上填写信息后点击提交按钮,数据通过HTTP请求发送到服务器的过程。HttpClient为我们提供了模拟这一过程的能力,无论是GET还是POST...
- 如果登录成功,服务器可能会返回一个会话cookie,HttpClient需要保存这个cookie以保持登录状态。 3. **HttpClient API使用** - `HttpClient`实例化:创建一个`HttpClient`对象,可以设置连接超时、重试策略等...
要使用HttpClient登录网易邮箱,我们首先要了解网易邮箱的登录接口和所需的数据格式。通常,登录接口会需要用户提供用户名(通常是邮箱地址)和密码。在HTTP POST请求中,这些数据会被封装在请求体里,以键值对的...
以下是一份使用`HttpClient`进行模拟登录的典型步骤和相关知识点: 1. **导入依赖**:首先,你需要在项目中引入`HttpClient`的相关jar包。这些jar包可能包括`httpclient`, `httpcore`, `httpmime`等,它们提供了...