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

httpClient100分紧急求助

各位高人:我想用httpClient模拟登陆后,获取登陆后网页的信息,但是却无论如何也得不到登陆后网页的信息,整了好久也不知道解决,请各位高手知道指教一下.不胜感激.我首先用ieHttpHeaders
各位高人:我想用httpClient模拟登陆后,获取登陆后网页的信息,但是却无论如何也得不到登陆后网页的信息,整了好久也不知道解决,请各位高手知道指教一下.不胜感激.我首先用ieHttpHeaders获取到netyi.net(得益网)的COOKIE信息如下:
POST /jsLoginStatus.aspx?returnUrl=%2fjsLoginStatus.aspx%3fguid%3db71cdc08-8622-42de-a4ba-fbd395c032ca HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://netyi.net/jsLoginStatus.aspx
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727)
Host: netyi.net
Content-Length: 53
Connection: Keep-Alive
Cache-Control: no-cache
COOKIE: __utma=7615405.1271095282.1176109184.1186976162.1189938905.6; __utmz=7615405.1186977812.5.7.utmccn=(organic)|utmcsr=google|utmctr=spring+in+action+%E4%B8%8B%E8%BD%BD|utmcmd=organic; cnzz02=6; rtime=1; ltime=1190001640890; cnzz_eid=1250906-http%3A//zyjarge.spaces.live.com/blog/cns%21939889bfd1aba233%21497.entry; dnttemplateid=0; ASP.NET_SessiOnId=0hiqkbiudskwzy45sgrenbme

UserName=zlh218&Password=000000&Submit.x=0&Submit.y=0

HTTP/1.1 302 Found
Date: Mon, 17 Sep 2007 04:00:06 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: /jsLoginStatus.aspx?guid=e1579e4a-0a08-48c8-a52f-e8110820dd80
Set-COOKIE: Passport=zlh218; domain=.netyi.net; path=/
Set-COOKIE: validateCode=88E67E5A0FA31EA4D710A2E00A28C414; domain=.netyi.net; path=/
Set-COOKIE: dnt=userid=802856&password=K8UyuJGWSS%2bbJ%2fduDu3plC07d%2fl6D%2b%2bqxIsCtqLlc0oTTWu77t9g3w%3d%3d&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=-1; path=/
Set-COOKIE: dnttemplateid=0; expires=Tue, 11-Aug-2009 14:39:06 GMT; path=/
Set-COOKIE: dnt=userid=802856&password=K8UyuJGWSS%2bbJ%2fduDu3plC07d%2fl6D%2b%2bqxIsCtqLlc0oTTWu77t9g3w%3d%3d&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=-1; path=/
Set-COOKIE: lastolupdate=1043693968; path=/
Set-COOKIE: .ASPXAUTH=6C2E31EECFB08DFF79EA98EAAB54AB30D2CBA7A5CBEB5609312C30989F56CF07DDB84D281E03DD6AF89B4070918C20D25E0195D8F4AB9193E08AA9B0FCA53B16405AFCFD166DBEC7B30340F46E325669; domain=.netyi.net; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=gb2312
Content-Length: 178

我的代码如下:
HttpClient client = new HttpClient();
  client.getHostConfiguration().setHost( "netyi.net" , 80, "http" );
  client.getParams().setCOOKIEPolicy(COOKIEPolicy.BROWSER_COMPATIBILITY);
  PostMethod post = new PostMethod("/jsLoginStatus.aspx?returnUrl=%2fjsLoginStatus.aspx%3fguid%3db71cdc08-8622-42de-a4ba-fbd395c032ca" );
  //NameValuePair chk = new NameValuePair( "chk" , "yes" );
 //NameValuePair re = new NameValuePair( "re_log" , "yes" );
  NameValuePair name = new NameValuePair( "UserName" , "zlh218" );
  NameValuePair pass = new NameValuePair( "Password" , "000000" );
  NameValuePair x = new NameValuePair( "Submit.x" , "0" );
  NameValuePair y = new NameValuePair( "Submit.y" , "0" );
  NameValuePair submit=new NameValuePair( "Submit" , "登 录" );
  post.setRequestHeader("Referer", "http://netyi.net/jsLoginStatus.aspx");
  post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  post.setRequestHeader("Content-Length", "53");
  post.setRequestHeader("COOKIE", "Passport=zlh218; domain=.netyi.net; validateCode=88E67E5A0FA31EA4D710A2E00A28C414; domain=.netyi.net; dnt=userid=802856&password=K8UyuJGWSS%2bbJ%2fduDu3plC07d%2fl6D%2b%2bqxIsCtqLlc0oTTWu77t9g3w%3d%3d&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=-1; dnttemplateid=0; expires=Tue, 11-Aug-2009 14:39:06 GMT; " +
   "dnt=userid=802856&password=K8UyuJGWSS%2bbJ%2fduDu3plC07d%2fl6D%2b%2bqxIsCtqLlc0oTTWu77t9g3w%3d%3d&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=-1; lastolupdate=1043693968; .ASPXAUTH=6C2E31EECFB08DFF79EA98EAAB54AB30D2CBA7A5CBEB5609312C30989F56CF07DDB84D281E03DD6AF89B4070918C20D25E0195D8F4AB9193E08AA9B0FCA53B16405AFCFD166DBEC7B30340F46E325669; domain=.netyi.net; path=/");
  post.setRequestBody( new NameValuePair[]{name,pass,x,y,submit});
  try{
  int status = client.executeMethod(post);
  System.out.println(status);
  if (status == HttpStatus.SC_MOVED_TEMPORARILY || status == HttpStatus.SC_MOVED_PERMANENTLY) {
            Header locationHeader = post.getResponseHeader("location");
            if (locationHeader != null) {
                String redirectUri = locationHeader.getValue();
                if (redirectUri == null || "".equals(redirectUri)) {
                    redirectUri = "/";
                }
                //client.getState().setCredentials("netyi.net","realm",new UsernamePasswordCredentials("zlh218", "000000"));
                GetMethod get = new GetMethod(redirectUri);
                get.setDoAuthentication(true);
                client.executeMethod(get);
                System.err.println("get redirect:");
                Header[] headers = get.getResponseHeaders();
                for (int i = 0; i < headers.length; ++i) {
                    System.err.println(headers[i].toString());
                }
                BufferedReader bf = new BufferedReader(new InputStreamReader(get.getResponseBodyAsStream()));   
                String s = null;   
                while ((s=bf.readLine()) != null)
                 System.out.println(s);
                get.releaseConnection();
            }
        }
  }catch(Exception e){
         e.printStackTrace();
        }
运行后却始终得到是未登陆前的网页信息,不知道是怎么回事,请高手指点!100分

12 个解决方案

#1


帮顶,这个问题帮你看看

#2


各位高人,快点给答案啊,好急!!!!!!!!!!!!!!!!!

#3


wangc4(wang),你能给我答案吗?非常感激

#4


这么长...

#5


多数是登陆错误吧,检测用户名密码的正确性,

NameValuePair submit=new NameValuePair( "Submit" , "登 录" );
看看这段后台获得的是什么,如果是乱码就要转码了

#6


可能是你登录以后的页面发生跳转了吧。
你用这个语句看看:
Header header = post.getResponseHeader("Location");
if(header != null){
            //页面有跳转
            locateURL = header.getValue();
            System.out.println("RedirectPage : "+locateURL);
}
然后在去连接跳转后的页面,就能拿到页面的数据了。

#7


/**
   这是修改后的代码,只改正了两处:
   1:get前加上COOKIE
   2:get时加上HOST

 */

final String HOST="http://www.netyi.net";
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost("www.netyi.net", 80, "http");
client.getParams().setCOOKIEPolicy(COOKIEPolicy.BROWSER_COMPATIBILITY);
PostMethod post = new PostMethod(
"/jsLoginStatus.aspx?returnUrl=%2fjsLoginStatus.aspx%3fguid%3db71cdc08-8622-42de-a4ba-fbd395c032ca");
// NameValuePair chk = new NameValuePair( "chk" , "yes" );
// NameValuePair re = new NameValuePair( "re_log" , "yes" );
NameValuePair name = new NameValuePair("UserName", "zlh218");
NameValuePair pass = new NameValuePair("Password", "000000");
NameValuePair x = new NameValuePair("Submit.x", "0");
NameValuePair y = new NameValuePair("Submit.y", "0");
NameValuePair submit = new NameValuePair("Submit", "登 录");
post.setRequestHeader("Referer", "http://netyi.net/jsLoginStatus.aspx");
post.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
post.setRequestHeader("Content-Length", "53");
post
.setRequestHeader(
"COOKIE",
"Passport=zlh218; domain=.netyi.net; validateCode=88E67E5A0FA31EA4D710A2E00A28C414; domain=.netyi.net; dnt=userid=802856&password=K8UyuJGWSS%2bbJ%2fduDu3plC07d%2fl6D%2b%2bqxIsCtqLlc0oTTWu77t9g3w%3d%3d&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=-1; dnttemplateid=0; expires=Tue, 11-Aug-2009 14:39:06 GMT; "
+ "dnt=userid=802856&password=K8UyuJGWSS%2bbJ%2fduDu3plC07d%2fl6D%2b%2bqxIsCtqLlc0oTTWu77t9g3w%3d%3d&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=-1; lastolupdate=1043693968; .ASPXAUTH=6C2E31EECFB08DFF79EA98EAAB54AB30D2CBA7A5CBEB5609312C30989F56CF07DDB84D281E03DD6AF89B4070918C20D25E0195D8F4AB9193E08AA9B0FCA53B16405AFCFD166DBEC7B30340F46E325669; domain=.netyi.net; path=/");
post.setRequestBody(new NameValuePair[] { name, pass, x, y, submit });
try {
int status = client.executeMethod(post);
System.out.println(status);

       //打印服务器返回的状态

        System.out.println(post.getStatusLine());
        
        //code=302 redirect page

if (status == HttpStatus.SC_MOVED_TEMPORARILY
|| status == HttpStatus.SC_MOVED_PERMANENTLY) {
Header locationHeader = post.getResponseHeader("location");
if (locationHeader != null) {
String redirectUri = locationHeader.getValue();
if (redirectUri == null || "".equals(redirectUri)) {
redirectUri = "/";
}
System.out.println("redirecturl:"+redirectUri);
// client.getState().setCredentials("netyi.net","realm",new
// UsernamePasswordCredentials("zlh218", "000000"));

GetMethod get = new GetMethod(HOST+redirectUri);
get.setDoAuthentication(true);
get
.setRequestHeader(
"COOKIE",
"Passport=zlh218; domain=.netyi.net; validateCode=88E67E5A0FA31EA4D710A2E00A28C414; domain=.netyi.net; dnt=userid=802856&password=K8UyuJGWSS%2bbJ%2fduDu3plC07d%2fl6D%2b%2bqxIsCtqLlc0oTTWu77t9g3w%3d%3d&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=-1; dnttemplateid=0; expires=Tue, 11-Aug-2009 14:39:06 GMT; "
+ "dnt=userid=802856&password=K8UyuJGWSS%2bbJ%2fduDu3plC07d%2fl6D%2b%2bqxIsCtqLlc0oTTWu77t9g3w%3d%3d&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=-1; lastolupdate=1043693968; .ASPXAUTH=6C2E31EECFB08DFF79EA98EAAB54AB30D2CBA7A5CBEB5609312C30989F56CF07DDB84D281E03DD6AF89B4070918C20D25E0195D8F4AB9193E08AA9B0FCA53B16405AFCFD166DBEC7B30340F46E325669; domain=.netyi.net; path=/");
client.executeMethod(get);
System.err.println("get redirect:");
Header[] headers = get.getResponseHeaders();
for (int i = 0; i < headers.length; ++i) {
System.err.println(headers[i].toString());
}
BufferedReader bf = new BufferedReader(
new InputStreamReader(get.getResponseBodyAsStream()));
String s = null;
while ((s = bf.readLine()) != null)
System.out.println(s);

get.releaseConnection();
}
}
} catch (Exception e) {
e.printStackTrace();
}

}

#8


request.getHeader("User-Agent")

#9


获取一个这个表单的各个域是什么,然后用HTTPCLIENT放进去就可以了

我用过HTTPCLIENT,功能很强大,提交表单登录是很容易实现的

#10


MARK

#11


NameValuePair   submit=new   NameValuePair(   "Submit "   ,   "登   录 "   ); 这句什么意思?这个不是应该是submit按钮的值吗?这个要写吗?请教了。

#12


mark

推荐阅读
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文讨论了在处理分页数据时常见的低级错误,并提供了优化后的代码示例,以减少重复代码并提高可读性和维护性。 ... [详细]
  • 利用Selenium框架解决SSO单点登录接口无法返回Token的问题
    针对接口自动化测试中遇到的SSO单点登录系统不支持通过API接口返回Token的问题,本文提供了一种解决方案,即通过UI自动化工具Selenium模拟用户登录过程,从浏览器的localStorage或sessionStorage中提取Token。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置单节点的Redis服务,包括下载、解压、编译安装以及启动服务的具体步骤。 ... [详细]
  • 本项目使用Java语言开发了一个基于B/S架构的指纹识别系统,该系统能够实现指纹的高效采集与精准识别,适用于多种安全认证场景。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 本文探讨了在不同场景下如何高效且安全地存储Token,包括使用定时器刷新、数据库存储等方法,并针对个人开发者与第三方服务平台的不同需求提供了具体建议。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • C#爬虫Fiddler插件开发自动生成代码
    哈喽^_^一般我们在编写网页爬虫的时候经常会使用到Fiddler这个工具来分析http包,而且通常并不是分析一个包就够了的,所以为了把更多的时间放在分析http包上,自动化生成 ... [详细]
  • 微信小程序支付官方参数小程序中代码后端发起支付代码支付回调官方参数文档地址:https:developers.weixin.qq.comminiprogramdeva ... [详细]
  • 本文探讨了如何在Sitecore 9环境中通过Postman使用API密钥发送请求,包括解决常见错误的方法。 ... [详细]
  • 使用Python构建网页版图像编辑器
    本文详细介绍了一款基于Python开发的网页版图像编辑工具,具备多种图像处理功能,如黑白转换、铅笔素描效果等。 ... [详细]
author-avatar
BOSS
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有