精通php的curl的进,有点难

WBOY
Release: 2016-06-23 14:17:16
Original
847 people have browsed it

模拟登陆织梦,版本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);?>
Copy after login


登陆成功后要跳转到 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;  }     ?> 
Copy after login

试试这个看行不行
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 提示信息!对不起,你没有权限执行此操作!点击此返回上一页>>
Copy after login

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

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

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

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

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

dede的登陆类做了限制

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template