php - 付费求解curl验证码登陆提交之后跳转到302页面
迷茫
迷茫 2017-04-11 10:19:42
[PHP讨论组]

付费求解决 curl验证码登陆之后 跳转地址302的问题,
多谢

是这样的,如果在搜狗搜索提交过于频繁的话,会跳转到一个要输入验证码的页面。
如果输入错误,返回json 验证码错之类的
如果输入正确,也返回json 提示正确。但是在pc端的话,会直接跳转到搜索结果页面。
我现在代码能够到正确的接收json。但是我不知道怎么获取返回的正确url

实在是惭愧,对curl太不熟悉。

有能解决的朋友请加我qq 44727340

从curl的返回结果看,现在是这个

HTTP/1.1 100 Continue

HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Sat, 18 Mar 2017 03:55:28 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Location: http://weixin.sogou.com/antispider/?from=%2fweixin%3Fie%3dutf8%26query%3d%E4%B9%90%E8%A7%86%E5%80%92%E9%97%AD%26type%3d2%26dp%3d1%26page%3d1

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 18 Mar 2017 03:55:28 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
<?php
$cookie_file = "./tmp.cookie";
$header = getSogouHead();

if (isset($_POST['dosubmit'])) {
    $login_url = 'http://weixin.sogou.com/antispider/thank.php';

    //$url = "http://weixin.sogou.com/weixin?ie=utf8&query=%E4%B9%90%E8%A7%86%E5%80%92%E9%97%AD&type=2&dp=1&page=1"; //这个是我需要返回的页面

    $antispider_url = 'http://weixin.sogou.com/antispider/?from=%2fweixin%3Fie%3dutf8%26query%3d乐视倒闭%26type%3d2%26dp%3d1%26page%3d1'; //这个是频繁刷新$url之后跳转到的页面

    $formData = $_POST;

    unset($formData['dosubmit']);
    //进行设置随机字符
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $login_url);
    curl_setopt($curl, CURLOPT_HEADER, $header);
    curl_setopt($curl, CURLOPT_USERAGENT, 'User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $formData);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
    //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
    $data = curl_exec($curl);
    $info = curl_getinfo($curl);
    curl_close($curl);
    print_r($info);
    print_r($data);
    //获取提交验证码返回结果end
    $url = ""; //如何获取上面代码跳转的地址然后给下面的代码打开呢……
    exit;
    //这以上代码是对的。问题出在下一步怎么做上,如何去获取跳转回来的页面并且用curl打开
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HEADER, $header);
    curl_setopt($ch, CURLOPT_USERAGENT, 'User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50');
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    $output = curl_exec($ch);
    curl_close($ch);
    print_r($output);

} else {
    $time = time();
    //初始化变量
    $login_url = 'http://weixin.sogou.com/antispider/?from=%2fweixin%3Fie%3dutf8%26query%3d乐视倒闭%26type%3d2%26dp%3d1%26page%3d1';

    $verify_code_url = 'http://weixin.sogou.com/antispider/util/seccode.php?tc=' . $time;

    $curl = curl_init();
    $timeout = 5;
    curl_setopt($curl, CURLOPT_URL, $login_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($curl, CURLOPT_HEADER, $header);
    curl_setopt($curl, CURLOPT_USERAGENT, 'User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50');
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //获取COOKIE并存储
    $contents = curl_exec($curl);
    curl_close($curl);
    //进行提取Form信息
    $pregInput = '<input[\s\S]*?name=[\'|"](.*?)[\'|"][\s\S]*?value=[\'|"](.*?)[\'|"][\s\S]*?>';
    preg_match_all($pregInput, $contents, $math);
    $formData = array();
    foreach ($math[1] as $key => $value) {
        $formData[$value] = $math[2][$key];
    }

    //print_R($formData);

    //取出验证码
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $verify_code_url);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
    curl_setopt($curl, CURLOPT_HEADER, $header);
    curl_setopt($curl, CURLOPT_USERAGENT, 'User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50');
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $img = curl_exec($curl);
    curl_close($curl);

    $fp = fopen("verifyCode.jpg", "w");
    fwrite($fp, $img);
    fclose($fp);

}

function getSogouHead()
{
    $head = array(
        'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding:gzip, deflate, sdch',
        'Accept-Language:zh-CN,zh;q=0.8',
        'Cache-Control:max-age=0',
        'Connection:keep-alive',
        'Host:weixin.sogou.com',
        'Upgrade-Insecure-Requests:1',
    );
    return $head;
}
?>


<!DOCTYPE html>
<html>
<head>
    <title>SOGOU</title>
    <meta charset="utf8">
</head>
<body>
<form action="" method="POST">
<?php
foreach ($formData as $key => $value) {
    ?>
    <input type="hidden" name="<?php echo $key ?>" value="<?php echo $value ?>">
    <?php
}
?>
输入验证码:    <input type="text" name="c"><img src="verifyCode.jpg">
<input type="hidden" name="tc" value="<?php echo $time; ?>">
<input type="submit" value="提交" name="dosubmit">
</form>
</body>
</html>
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
PHPz

谢邀,十分尴尬,没有做过搜狗验证码,刚刚goole了下貌似说的是要带入cookies即可,但是还是需要减少访问次数,没能具体帮您解决问题,表示惭愧,要去上课了没时间折腾,那就把所有次数用来帮您召唤些大神出来把

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号