在做POST登陆程序,在用httpclient得到登陆页面的时候出问题了,页面代码如下:

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
< html>
< head>
< meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
< meta http-equiv="Content-Script-Type" content="text/javascript">
 < script type="text/javascript"> function setCookie(c_name, value, expiredays) { var exdate = new Date(); 
exdate.setDate(exdate.getDate()+expiredays); document.cookie = c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toGMTString()) + ";path=/"; }
 function getHostUri() { var loc = document.location; return loc.toString(); } setCookie('YPF8827340282Jdskjhfiw_928937459182JAX666', '115.173.104.54', 10); 
setCookie('DOAReferrer', document.referrer, 10); location.href = getHostUri();
 < /script>
< /head>
< body>
< noscript>This site requires JavaScript and Cookies to be enabled. Please change your browser settings or upgrade your browser.< /noscript>
< /body>
< /html>

This site requires JavaScript and Cookies to be enabled. Please change your browser settings or upgrade your browser.
开始以为这一句是浏览器可以监测到JS是否运行,那我这个POST登陆就做不成了,只能考虑用IE插件模拟登陆了。
但查资料,有人说“服务器是没法判断你是否启用JS的。而判断COOKIE的话,应该是在首页的时候会发给你一个COOKIE,并且在其他页面判断是否有COOKIE,所以就得在COOKIE上入手,而不是User-agent”
这下就放心了。这个解决方法还是很简单的,就是模拟JS,给httpclient加上页面代码里的COOKIE后,再次访问登陆页面就可以得到正常的代码了。
问题终于解决了,就在于第一次抓取数据时,如上返回的数据,根据该数据,只要给HttpClient设置好Cookie,再重新抓取就可以了


标签: