本人现在在做一个模拟登陆万方网站的程序,现在可以模拟登陆代码如下:$file = dirname(__FILE__)."/".md5(basename(__FILE__));if(!file_exists($file)) {//判断COOKIE是否存在 不存在就登陆
preg_match('/input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)"/',get('http://login.wanfangdata.com.cn/login.aspx'),$html);//获取登陆随机值
$vloginp="__VIEWSTATE=$html[1]&userid=username&password=password&login=%E7%99%BB%E5%BD%95";//登陆数据包
login('http://login.wanfangdata.com.cn/login.aspx',$vloginp); //执行登陆
$VIEWSTATE = $html[1];
//$url = 'http://check.wanfangdata.com.cn/UploadPaper.aspx';
}
$url = 'http://127.0.0.1/xwjyz/Paper/login/UploadPaper.php?code='.$VIEWSTATE;
echo get($url);//用上面登陆后获取的COOKIE抓取登陆后的页面
//delcookie($file);//删除COOKIEfunction login($url,$data){
$curl = curl_init();//启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url);//要访问的地址
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);//使用自动跳转 0是 1否 (下同)
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);//自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1); //发送一个POST请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //提交的数据包  
curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['file']); //存放Cookie信息的文件名称
curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['file']);//读取上面所储存的Cookie信息
curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时限制防止死循环 
curl_setopt($curl, CURLOPT_HEADER, 0); //显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl);//执行操作
if (curl_errno($curl)) {    
echo 'Errno'.curl_error($curl);    
}    
curl_close($curl);//关闭会话
return $tmpInfo; //返回数据
}
function delcookie($file){
@unlink($file);//删除文件
}
function get($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
curl_setopt($curl, CURLOPT_HTTPGET, 1); //发送一个GET请求
curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['file']);//读取上面所储存的Cookie信息
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$tmpInfo = curl_exec($curl);
if (curl_errno($curl)) {    
echo 'Errno'.curl_error($curl);    
}    
curl_close($curl);
return $tmpInfo;我现在是登陆后转到一个新的页面的,但是到了新的页面发现站点目录是生成了cookies,但是我在新页面提交内容到要模拟登陆的网站还是提示没有登陆,不知道怎么在新页面也保存这个cookies,哪位大哥可以帮帮吗啊!小弟不胜感激!

解决方案 »

  1.   

    文件都在同一目录,模拟登陆页面,登陆后的页面,cookies生成文件
      

  2.   


    我也遇到这个问题了,求解决方法 http://bbs.csdn.net/topics/390414467
      

  3.   

    给造矛者——打开返回header的开关,分析返回的header,一般新的cookie就在里面
    如果是用js生成的cookie可能需要v8
      

  4.   

    v8是什么,能不能写个例子呢 ,这是我的帖子帮我看下吧http://bbs.csdn.net/topics/390414467
      

  5.   


    不懂织梦,只懂做梦
    v8就是运行js的模块(基于chrome的开源javascript引擎写的php模块),没有*nix,没研究过