$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $url2); //url2 保存织梦登录发布文章的 地址
curl_setopt($ch2, CURLOPT_HEADER, 0);  
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1 ); // 1相当于return,0相当于echo
curl_setopt($ch2, CURLOPT_BINARYTRANSFER, true);   
curl_setopt($ch2, CURLOPT_TIMEOUT, 0);    //超时时间30s    
curl_setopt($ch2,CURLOPT_COOKIESESSION,true);
curl_setopt($ch2, CURLOPT_HTTPGET, 1); // 发送一个常规的get请求
curl_setopt($ch2, CURLOPT_AUTOREFERER, 1); // 自动设置Referer 
curl_setopt($ch2, CURLOPT_POSTFIELDS, $post_data2); //设置需要post的数据  文章数据内容
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION,0); //是否抓取跳转后的页面,1是自动跳转
$header[]='Cookie:'.$temp['post_cookie']; /以前用header传送数据测
curl_setopt($ch2, CURLOPT_HEADER, 1);  
curl_setopt($ch2, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
curl_setopt($ch2, CURLOPT_COOKIE,$temp['post_cookie']);//抓包获得COOKIE 文件
//curl_setopt($ch2, CURLOPT_HTTPHEADER,$header); // 传送整个头部
$output = curl_exec($ch2);   //返回全部信息但不输出用于排查错误
$httpCode = curl_getinfo($ch2,CURLINFO_HTTP_CODE);
curl_close($ch2);
$dm=substr($output,9,3); 
// 以下为dede发布补全网址,不会正则很麻烦
$output=strstr($output, '<a href=');
$output=strstr($output, '<table',true);
$output=strstr($output, '</u></a>');
$output=strstr($output, "'");
$output=strstr($output, "target='_blank'",true);
$output=str_replace("'","",$output);
$cuont="网站名称:".$temp['post_name']." 发布结果:".$dm.",发布地址链接:<a href=".$temp['post_weburl'].$output." target=_blank>点击查看</a>";
echo $cuont;]
以上是dede的一个模拟登录后台发布代码段,现在采用的一个很笨的方式是手动登录dede 获得cookie 的PHPSESSID数值当钥匙也就是cookie的数值进行发布,想在此基础上进行优化,实现免登陆。经过测试
$cur0 = curl_init();
$cookie_jar = tempnam('./tmp','cookie');
echo $cookie_jar;
curl_setopt($cur0, CURLOPT_URL,'http://www.xxx.com/xxxx/login.php');//这里写上处理登录的界面
curl_setopt($cur0, CURLOPT_POST, 1);//$data = 'gotopage=%xxxx%2Findex.php&dopost=login&adminstyle=newdedecms&userid=xxx&pwd=xxx&sm1=';//curl_setopt($cur0, CURLOPT_POSTFIELDS, $data);//传 递数据
curl_setopt($cur0, CURLOPT_COOKIESESSION, true );
curl_setopt($cur0, CURLOPT_COOKIEJAR, $cookie_jar);// 把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($cur0, CURLOPT_RETURNTRANSFER, 1);//设定返回 的数据是否自动显示
curl_setopt($cur0, CURLOPT_HEADER, false);//设定是否显示头信 息
curl_setopt($cur0, CURLOPT_NOBODY, false);//设定是否输出页面 内容
curl_setopt($cur0, CURLOPT_FOLLOWLOCATION, 1);
$content = curl_exec($curl2);
curl_close($curl); //关闭
echo $content这个是模拟登录的代码,可以实现登录成功,但是立刻js跳转到index.php 页面 因为本地没有所以返回302了,获得的登录cookie无法作用到添加文章的页面也会返回302。
$cookie_jar = tempnam('./tmp','cookie');
//echo 'D:\WWW\news\tmp\coo539C.tmp';
$astr ="PHPSESSID=d12218622254dd4b45251a80ddea1971;"; $url2="http://www.xxx.com/xxx/article_add.php";
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $url2);
curl_setopt($ch2, CURLOPT_HEADER, 0);  
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1 ); // 1相当于return,0相当于echo
curl_setopt($ch2, CURLOPT_BINARYTRANSFER, true);   
curl_setopt($ch2, CURLOPT_TIMEOUT, 0);    //超时时间30s    
curl_setopt($ch2,CURLOPT_COOKIESESSION,true);
curl_setopt($ch2, CURLOPT_HTTPGET, 1); // 发送一个常规的get请求
curl_setopt($ch2, CURLOPT_AUTOREFERER, 1); // 自动设置Referer 
//echo $post_data2;
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION,0); //是否抓取跳转后的页面,1是自动跳转
curl_setopt($ch2, CURLOPT_COOKIEJAR,$cookie_jar);// 把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($ch2, CURLOPT_HEADER, 1);  
curl_setopt($ch2, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
curl_setopt($ch2, CURLOPT_COOKIE,$astr);
//curl_setopt($ch2, CURLOPT_HTTPHEADER,$header); //
$output = curl_exec($ch2);   //返回全部信息但不输出用于排查错误
//echo $cookie_jar;
echo $cookie_jar;以上是使用一个过期的PHPSESSID进行访问,虽然已经超时但是可以获得新闻添加页面的数据但是不能post,我尝试把这个访问页面的COOKIE拿出来,但是无法取得数据。这几天一直弄,这个发布模块,我在别人的后台看到可以实现远程发布多个dede织梦后台的网站。所以才着手进行写的。实际上被登录织梦后台登陆的js跳转困扰到了。COOKIE的作用域不同无法拿到登陆后的实际COOKIE。后来把登陆成功的cookie与发布的cookie进行比较发现缺少的是登录ID,登录超时的信息,其实PHPSESSID都是相同的。然后进行伪造COOIKE,缺发现了时间戳一个是纯数字的好解决,另外一个是16位MD5的无法解密。遇到了瓶颈,求高手给一个思路。先声明织梦的确可以进行原创发布后台文章。因为我使用过类似后台 登录选择某个织梦网站,进行一篇文章单网站或者多网站的发布任务。