热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

小弟用HttpClient对一个网页进行模拟登陆,但是对HttpClient不太熟练遇到了点问题。请各位大哥花点时间帮小弟改下呗O(∩_∩)O~

模拟用户登陆-登陆成功获取随机的cookie利用此cookie对http:61.144.195.168PhoneReaddefault.aspx进行发送文章里的代码里注释里的那一块数据以及登陆
模拟用户登陆-登陆成功获取随机的COOKIE利用此COOKIE对http://61.144.195.168/PhoneRead/default.aspx进行发送文章里的代码里注释里的那一块数据以及登陆得到的COOKIE!

最下方的是我的源码, 已经取到了登陆时所需要的COOKIE了。 做到我卡主了不知道怎么对http://61.144.195.168/PhoneRead/default.aspx发送COOKIE!对HttpClient不太熟帮帮忙= =。 

package com.newpalm.unicomfetch.threads;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Vector;
import org.apache.commons.httpclient.COOKIE;
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.COOKIE.COOKIEPolicy;
import org.apache.commons.httpclient.COOKIE.COOKIESpec;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.log4j.Logger;
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.visitors.ObjectFindingVisitor;
/**
 * 用来演示登录表单的示例
 * 
 */
public class FormLoginDemo {

    public static void main(String[] args) throws Exception{
    
     String s ="登   录";
     String s1 ="abc123";

     Parser parser = null;
     ObjectFindingVisitor visitor = null;
        HttpClient client = new HttpClient();
        client.getParams().setContentCharset("GBK");
//        method.addParameter("login", "登录");

        //模拟登录页面
        PostMethod post = new PostMethod("d");
       NameValuePair __VIEWSTATE = new NameValuePair("__VIEWSTATE","/wEPDwUJODg1NzI5NTYwZGSqtd9cESQGNA00lLD3T6Z/0TiG4w==");
        NameValuePair __EVENTVALIDATION = new NameValuePair("__EVENTVALIDATION","/wEWBAKY3ZTzAwKl1bKzCQK1qbSRCwLCi9reA99MBLTab8Vojx1AKgKrre0MPlRd");
        NameValuePair __EVENTTARGET = new NameValuePair("__EVENTTARGET","");
        NameValuePair __EVENTARGUMENT = new NameValuePair("__EVENTARGUMENT","");
        NameValuePair txtUserName = new NameValuePair("txtUserName",s1);
        NameValuePair txtPassword = new NameValuePair("txtPassword","123789");
        NameValuePair btnSubmit = new NameValuePair("btnSubmit",s);
      post.setRequestBody(new NameValuePair[]{__EVENTTARGET,__EVENTARGUMENT,__VIEWSTATE,__EVENTVALIDATION,txtUserName,txtPassword,btnSubmit});
        int status = client.executeMethod(post);
        
        post.releaseConnection();  
        //查看COOKIE信息
        COOKIESpec COOKIEspec = COOKIEPolicy.getDefaultSpec();
        COOKIE[] COOKIEs = client.getState().getCOOKIEs();
        if (COOKIEs.length == 0) {
           System.out.println("None");    
        } else {
           for (int i = 0; i < COOKIEs.length; i++) {
              System.out.println(COOKIEs[i].toString());     //得到新的COOKIE
           }
       }
        
        
 
  
/*
 
    PostMethod pt = new PostMethod("http://61.144.195.168/PhoneRead/default.aspx");    //对新的URL进行post以下数据以及一个登陆时获取的COOKIE!
         NameValuePair __VIEWSTATE2= new NameValuePair("__VIEWSTATE", "/wEPDwUJMzc4NDIwMDA5D2QWAgIDD2QWBAIFDxBkDxYBZhYBEAUM6ZqP6ZiF5Lmm5Z+OBQzpmo/pmIXkuabln45nZGQCBw8QDxYGHg5EYXRhVmFsdWVGaWVsZAUCSUQeDURhdGFUZXh0RmllbGQFCkNoYW5uZWxOdW0eC18hRGF0YUJvdW5kZ2QPFgICAgIDFgIQBQwwMjAwMjAwMzQwMDcFAzc1MmcQBQswNTAwMTAwNTU3OQUDNzk0Z2RkGAEFCGd2RGV0YWlsD2dkNluMBLPjjOtL0bcj6MAECxEc2ms=");
         NameValuePair __EVENTVALIDATION2 = new NameValuePair("__EVENTVALIDATION", "/wEWCwKMp47hDgLg2ZN+AsKGtEYC+OjGlwICrMHw9QgCs+GQ8Q4Ct67r/gsC4f3+FQLtgM2ICAKBlYDZCwLCi9reA/uS0jd+R+EbTMk75431NHsvKK5Y");
         NameValuePair txtStartDate = new NameValuePair("txtStartDate", "2011-01-11");
         NameValuePair txtEndDate = new NameValuePair("txtEndDate", "2011-02-11");
         NameValuePair ddlProductType = new NameValuePair("ddlProductType.x", "随阅书城"); 
         NameValuePair ddlChannelNum = new NameValuePair("ddlChannelNum", "no"); 
         NameValuePair ddlType = new NameValuePair("ddlType", "day"); 
         NameValuePair btnSubmit2 = new NameValuePair("btnSubmit", "查 询");
         pt.setRequestBody(new NameValuePair[]{__VIEWSTATE2,__EVENTVALIDATION2,txtStartDate,txtEndDate,ddlProductType,ddlChannelNum,ddlType,btnSubmit2});
*/
         
      
  }
        



12 个解决方案

#1


 


 救命啊! 大哥们。

#2


想办法获得response对象吧,不然COOKIE没法写啊!~

#3


引用 2 楼 emon123 的回复:
想办法获得response对象吧,不然COOKIE没法写啊!~

注释里这些就是啊!  

#4


Header headerResponse = postMethod.getResponseHeader(COOKIE); 是这个不?   

#5


我大概知道了。。

#6


该回复于2011-02-14 09:40:54被版主删除

#7


该回复于2011-02-14 10:41:16被版主删除

#8


aspx ?

#9


搞定了,登录获取COOKIE。利用COOKIE访问第二个页面!  代码写的不好分享下!


package com.newpalm.unicomfetch.threads;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.httpclient.COOKIE;
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.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

/**
 * 
 *@xiaozhong
 */
public class FormLoginDemo {

    public static void main(String[] args) throws Exception{
    
     String s ="登   录";
     String s1 ="admin";  //账号
        HttpClient client = new HttpClient();
        client.getParams().setContentCharset("GBK");


        //模拟登录页面
        PostMethod post = new PostMethod("http://localhost/PhoneRead/login.aspx");
       NameValuePair __VIEWSTATE = new NameValuePair("__VIEWSTATE","/wEPDwUJODg1NzI5NTYwZGSqtd9cESQGNA00lLD3T6Z/0TiG4w==");
        NameValuePair __EVENTVALIDATION = new NameValuePair("__EVENTVALIDATION","/wEWBAKY3ZTzAwKl1bKzCQK1qbSRCwLCi9reA99MBLTab8Vojx1AKgKrre0MPlRd");
        NameValuePair __EVENTTARGET = new NameValuePair("__EVENTTARGET","");
        NameValuePair __EVENTARGUMENT = new NameValuePair("__EVENTARGUMENT","");
        NameValuePair txtUserName = new NameValuePair("txtUserName",s1);
        NameValuePair txtPassword = new NameValuePair("txtPassword","123789");
        NameValuePair btnSubmit = new NameValuePair("btnSubmit",s);
        post.setRequestBody(new NameValuePair[]{__EVENTTARGET,__EVENTARGUMENT,__VIEWSTATE,__EVENTVALIDATION,txtUserName,txtPassword,btnSubmit});
        int status = client.executeMethod(post);
        
        post.releaseConnection();  
        //查看COOKIE信息
//        COOKIESpec COOKIEspec = COOKIEPolicy.getDefaultSpec();
        COOKIE[] COOKIEs = client.getState().getCOOKIEs();
        if (COOKIEs.length == 0) {
           System.out.println("None");    
        } else {
           for (int i = 0; i < COOKIEs.length; i++) {
              System.out.println("i:"+COOKIEs[i].toString());    //获取的COOKIE 
           }
       }
       
        NameValuePair __VIEWSTATE2= new NameValuePair("__VIEWSTATE", "/wEPDwUJMzc4NDIwMDA5D2QWAgIDD2QWBAIFDxBkDxYBZhYBEAUM6ZqP6ZiF5Lmm5Z+OBQzpmo/pmIXkuabln45nZGQCBw8QDxYGHg5EYXRhVmFsdWVGaWVsZAUCSUQeDURhdGFUZXh0RmllbGQFCkNoYW5uZWxOdW0eC18hRGF0YUJvdW5kZ2QPFgICAgIDFgIQBQwwMjAwMjAwMzQwMDcFAzc1MmcQBQswNTAwMTAwNTU3OQUDNzk0Z2RkGAEFCGd2RGV0YWlsD2dkNluMBLPjjOtL0bcj6MAECxEc2ms=");
        NameValuePair __EVENTVALIDATION2 = new NameValuePair("__EVENTVALIDATION", "/wEWCwKMp47hDgLg2ZN+AsKGtEYC+OjGlwICrMHw9QgCs+GQ8Q4Ct67r/gsC4f3+FQLtgM2ICAKBlYDZCwLCi9reA/uS0jd+R+EbTMk75431NHsvKK5Y");
        NameValuePair txtStartDate = new NameValuePair("txtStartDate", "2011-01-20");
        NameValuePair txtEndDate = new NameValuePair("txtEndDate", "2011-01-23");
        NameValuePair ddlProductType = new NameValuePair("ddlProductType.x", "aa"); 
        NameValuePair ddlChannelNum = new NameValuePair("ddlChannelNum", "no"); 
        NameValuePair ddlType = new NameValuePair("ddlType", "day"); 
        NameValuePair btnSubmit2 = new NameValuePair("btnSubmit", "查 询");
       
        
        // (1)构造HttpClient的实例   
        HttpClient httpClient = new HttpClient();   
        httpClient.getParams().setContentCharset("GBK");
     // (2)创建POST方法的实例   
        PostMethod postMethod = new PostMethod("http://localhost/PhoneRead/default.aspx");   
     // (3)设置http request头   
        List headers = new ArrayList();   
        headers.add(new Header("COOKIE", COOKIEs[0].toString()));   
        httpClient.getHostConfiguration().getParams().setParameter("http.default-headers", headers);    //发送头信息 
        postMethod.setRequestBody(new NameValuePair[]{__VIEWSTATE2,__EVENTVALIDATION2,txtStartDate,txtEndDate,ddlProductType,ddlChannelNum,ddlType,btnSubmit2}); 
        
        // 使用系统提供的默认的恢复策略   
        postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); 
     
        try  
        {   
            // (4)执行postMethod   
            int statusCode = httpClient.executeMethod(postMethod);   
            if (statusCode != HttpStatus.SC_OK)   
            {   
                System.err.println("Method failed: " + postMethod.getStatusLine());   
            }   
            
            // (5)读取response头信息   
//            Header headerResponse = postMethod .getResponseHeader("COOKIE");   
            
//            String headerStr = headerResponse.getValue(); 
//            String headerStr = httpClient.getState().get
            
            // (6)读取内容   
            byte[] responseBody = postMethod.getResponseBody();   
            // (7) 处理内容   
//            System.out.println(headerStr);   
            System.out.println(new String(responseBody));   
        } catch (HttpException e)   
        {   
            // 发生致命的异常,可能是协议不对或者返回的内容有问题   
            System.out.println("Please check your provided http address!");   
            e.printStackTrace();   
        } catch (IOException e)   
        {   
            e.printStackTrace();   
        } catch (Exception e)   
        {   
            e.printStackTrace();   
        } finally  
        {   
            // 释放连接   
            postMethod.releaseConnection();   
        }   

        
        
  }

}

#10


该回复于2011-02-14 17:18:17被版主删除

#11


该回复于2011-02-15 08:41:38被版主删除

#12


借用一下,谢谢

推荐阅读
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
author-avatar
平安
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有