Heim  >  Artikel  >  Backend-Entwicklung  >  精通php的curl的进,有点难

精通php的curl的进,有点难

WBOY
WBOYOriginal
2016-06-23 14:17:16847Durchsuche

模拟登陆织梦,版本5.7,已经去掉后台验证码,不知道为啥一直登陆不上(提示登陆成功却又跳回登陆地址)

<?php$cookie_file    =    tempnam('./temp','cookie');$login_url        =    'http://localhost/dedecms/dede/login.php';$post_fields    =    'gotopage=%2Fdedecms%2Fdede%2Findex.php&dopost=login&adminstyle=newdedecms&userid=admin&pwd=123456&sm1=';$ch = curl_init($login_url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);curl_exec($ch);curl_close($ch);$url='http://localhost/dedecms/dede/article_add.php?channelid=1';$ch = curl_init($url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);$contents = curl_exec($ch);curl_close($ch);?>


 登陆成功后要跳转到 http://localhost/dedecms/dede/article_add.php?channelid=1


回复讨论(解决方案)

表示没看懂,坐等高人,进来学习

推荐使用框架 snoopy
google一下即可。

要跳转?你就跟着跳转就是了
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

应该是织梦那边有什么cookie没有统一吧?

看了楼主的代码,我倒想起了之前弄的一个东西原来是错在这个地方了
之前,我是一起写的。
[code]
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); 
[/code]

要跳转?你就跟着跳转就是了
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

加上这行也不行啊,你那边测试过了吗,测试过的话请贴下代码

看了楼主的代码,我倒想起了之前弄的一个东西原来是错在这个地方了
之前,我是一起写的。
[code]
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); 
[/code]

那应该怎么写 请贴下完整的代码

试试这个看行不行

function getHtml($url,$tmpFile,$postData)  {      $ch = curl_init($url);      curl_setopt($ch,CURLOPT_HEADER,0);      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch, CURLOPT_COOKIEJAR, $tmpFile);      curl_setopt($ch, CURLOPT_COOKIEFILE, $tmpFile);       if($postData!=NULL)      {          curl_setopt($ch, CURLOPT_POST, 1);            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);       }      $content=curl_exec($ch);        curl_close($ch);       return $content;  }     ?> 

试试这个看行不行
PHP code?1234567891011121314151617function getHtml($url,$tmpFile,$postData)  {      $ch = curl_init($url);      curl_setopt($ch,CURLOPT_HEADER,0);      curl_setopt($ch, CURLOPT_……
不行用不了

Snoopy这个还真是简单易用

要跳转?你就跟着跳转就是了
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 没人会么

推荐使用框架 snoopy

推荐使用框架 snoopy

这个框架不管用,不信你试试

帮你跟了下代码,会在织梦/dede/config.php  文件 里面

if($cuserLogin->getUserID()==-1)
{
    header("location:login.php?gotopage=".urlencode($dedeNowurl));
    exit();
}
这里调处来,登入成功应该要给你个uid,你看看 在哪了搞下

帮你跟了下代码,会在织梦/dede/config.php  文件 里面

if($cuserLogin->getUserID()==-1)
{
    header("location:login.php?gotopage=".urlencode($dedeNowurl));
    exit();
}
这里调处来,登入成功应该要给你个uid,你看看 在哪了…… 这个应该是有的,因为都提示登陆成功了

引用 14 楼 jsbba 的回复:帮你跟了下代码,会在织梦/dede/config.php  文件 里面

if($cuserLogin->getUserID()==-1)
{
    header("location:login.php?gotopage=".urlencode($dedeNowurl));
    exit();
}
这里调处来,登入成……
呵呵  有但是-1   你吧这段去掉 就可以登入进去了 

引用 15 楼 dz215136304 的回复:引用 14 楼 jsbba 的回复:帮你跟了下代码,会在织梦/dede/config.php  文件 里面

if($cuserLogin->getUserID()==-1)
{
    header("location:login.php?gotopage=".urlencode($dedeNowurl));
 ……

同样不行,提示 

DedeCMS 提示信息!对不起,你没有权限执行此操作!点击此返回上一页>>

你login时抓包一下。然后把里面header所有的信息全部保存下来,包括referer啊,useragent啊。。然后再用curl发这样一个大杂烩的包,看看能不能成功

你login时抓包一下。然后把里面header所有的信息全部保存下来,包括referer啊,useragent啊。。然后再用curl发这样一个大杂烩的包,看看能不能成功 不行的

哦 楼主的代码我证实了一下 是没有问题的 一般的 无验证网站是都能模拟登录的  或许是你这个网站有什么特殊的配置或者 加密验证  你再深入查一下  登录文件的代码

哦 楼主的代码我证实了一下 是没有问题的 一般的 无验证网站是都能模拟登录的  或许是你这个网站有什么特殊的配置或者 加密验证  你再深入查一下  登录文件的代码
thankyou

header("location:login.php?gotopage=".urlencode($dedeNowurl));

dede的登陆类做了限制

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn