热门标签 | 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

推荐阅读
  • DSP中cmd文件的命令文件组成及其作用
    本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • win10系统搭建Java开发环境的操作方法
    本文介绍了win10系统搭建Java开发环境的详细操作方法,包括下载Windows10系统和Java SE,安装Java开发环境,设置变量等步骤。操作简单,只需按照指导进行即可。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • linux6.5 配置邮件服务,centos 6.5服务器搭建邮件服务postfix和dovecot
    centos6.5搭建邮件服务postfix和dovecot------------------------------------------------安装DNS指定邮件交换记 ... [详细]
  • 主存同步mysql_MySQL阶段五——主从复制原理、主从延迟原理与解决
    MySQL主从复制原理、主从延迟原理与解决MySQL主从复制画图描述:MySQL主从复制原理上图详解:①用户做crud操作,写入数据库&# ... [详细]
  • Linux操作系统回炉复习各种常用命令集合解析
    Linux操作系统回炉复习各种常用命令集合解析猿码互联猿码互联今天Linux终端命令格式目标了解终端命令格式知道如何查阅终端命令帮助信息01.终端命令格式command[ ... [详细]
  • 1.man(相当于cmd--help)对不熟悉的命令想查询详细使用方法的帮助解释可以使用eg:manls就可以查看ls相关的用法注: ... [详细]
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社区 版权所有