curl模拟登陆时,在每一步 CURLOPT_COOKIEJAR, CURLOPT_COOKIEFILE都要尽量加上

原创 2016年05月31日 11:19:01

我遇到过这样一个问题:

postdata中除了账号密码,还有个叫csrf的参数,而这个参数先要通过爬取login页面,才能获得。

第一步:

    do{
        if($i > 2)
            break;
        $i++;
        $url = LOGIN_URL;
        echo "$url \n";
        $ch = curl_init($url);
        $curl_opts = array(CURLOPT_HEADER => false,
            CURLOPT_NOBODY => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_USERAGENT => $user_agent,
        );

        curl_setopt_array($ch, $curl_opts);
        $pass = curl_exec($ch);
        //curl_close($ch);
    }while(!$pass);
    preg_match_all('/name="csrf" value="(.*?)"><label/',$pass,$m);
    $csrf = $m[1][0];
第二步:

    $flag = true;
    $i = 0;
    #login ebay
    do{
        if($i > 2)
            break;
        $i++;
        $url = LOGIN_URL;
        echo "$url \n";
        $ch = curl_init($url);
        $curl_opts = array(CURLOPT_HEADER => false,
            CURLOPT_NOBODY => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_USERAGENT => $user_agent,
            CURLOPT_COOKIEJAR => $file_cook,
            CURLOPT_COOKIEFILE => $file_cook,
            CURLOPT_POST=> true,
            CURLOPT_POSTFIELDS => 'email='.$username.'&password='.$userpass.'&csrf='.$csrf,
        );

        curl_setopt_array($ch, $curl_opts);
        $pass = curl_exec($ch);
        curl_close($ch);
        if($pass && strpos($pass, 'Chen')!==false){
            $flag = false;
        }
    }while($flag);

该做的都照做了,但是,仍然登不上。后来发现,第一步没有加入
     CURLOPT_COOKIEJAR => $file_cook,
     CURLOPT_COOKIEFILE => $file_cook,



这两个参数,加上了,就可以正确登陆了。

结论:目标有可能第一步就给我们的浏览器种cookie,我们要在模拟登陆过程中,全部加上cookie操作。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE有什么关系?

前者 是连接时把获得的cookie存为文件 后者是 在访问其他页面时拿着这个cookie文件去访问

CURL不依赖COOKIEJAR获取COOKIE

PHP中CURL类是一个非常牛逼的工具类,具体怎么牛逼就不啰嗦了。 对于COOKIE,CURL类也有很不错的支持,但不够灵活,并未能通过现成的方法以变量的方法获取到,而以要通过以下方法实现。 ...

CURL详解

curl_setop()函数中的参数中文说明 curl_setop()函数中的参数中文说明 curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,va...
  • zqt520
  • zqt520
  • 2014-01-01 14:24
  • 12177

shell 下 urlencode/urldecode 编码/解码的几种方法

1、先弄清楚为什么要 urlencode? http://www.genome.iastate.edu/community/angenmap/URLEncoding.html URL Encoding...

curl post传值,必须用urlencode

浏览器每次向服务器发送url时,会进行编码,然后web服务器再进行解码。 所以,理论上,curl模拟登陆时,所传参数都必须urlencode一下。 同时,浏览器fomat data区域的view ...

Linux命令CURL用法

Curl是一个命令行方式下传输数据的开源传输工具,支持多种协议包括:FTP,HTTP,HTTPS,IMAP,POP3,TELNET等。同样支持HTTP POST方法,PUT方法,FTP上传,cooki...

使用curl实现http传输,Url编解码问题

当Url字符串中有汉字时,curl会出现乱码的问题。 解决方法:   首先,要将工程更改为对方编码格式相同的工程(如utf-8、gb2312等)。 以VS为例:           选中项目...

PHP curl 的CURLOPT_POSTFIELDS之数组和字符串之谜

PHP的CURLOPT_POSTFIELDS参数使用数组和字符串的区别

转:CURLOPT

curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。下列选项的值将被作为长整形使用(在option参数中指定): *CURLOPT...

libcurl部分总结||CURLOPT_POSTFIELDS 之间用&间隔开来

CURLOPT_POSTFIELDS 之间用&间隔开来。 --------以下为ChinaUnix liu277325073的总结,感谢之-------------- curl是开源的东西,主...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)