微信号:phpgod

介绍:本公众号对PHP开发技术进行全面透析,所含内容适合各个阶段的PHP developer阅读和收藏,既然关注了就一定会有收获.

PHP脚本自动识别验证码,查询汽车违章

2016-12-23 22:47 猿哥

本文转载自:http://blog.41ms.com/post/64.html

经常有查下自己的车有没有违章,所以写了现在这个脚本,帮助查询自己的车是否违章。

主要用到,带cookie模拟表单提交和验证码识别。

Tesseract-OCR

验证码识别技术,Tesseract-OCR: https://github.com/tesseract-ocr/tesseract

安装教程: https://github.com/tesseract-ocr/tesseract

Tesseract-Ocr-For-PHP

把需要执行的命令,封装了一下

https://github.com/thiagoalessio/tesseract-ocr-for-php

直接上脚本,没进行什么优化,简单了解下:

<?phprequire 'TesseractOCR.php';function weizhang($car_code, $fdjh){

    $shanghui = mb_substr($car_code, 0, 1, 'utf-8');

    $pre = array(        '冀' => 'he',        '云' => 'yn'
    );

    $url_pre = $pre[$shanghui];

    $headers = array(        'Host: '.$url_pre.'.122.gov.cn',        'Origin: http://'.$url_pre.'.122.gov.cn',        'Referer: http://'.$url_pre.'.122.gov.cn/views/inquiry.html?q=j',        'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36 QQBrowser/4.1.4132.400'
    );    //初始化变量
    $cookie_file = 'cookie.txt';
    $login_url = "http://$url_pre.122.gov.cn/views/inquiry.html?q=j";
    $post_url = "http://$url_pre.122.gov.cn/m/publicquery/vio";
    $verify_code_url = "http://$url_pre.122.gov.cn/captcha?nocache=".time();

    $curl = curl_init();
    $timeout = 5;
    curl_setopt($curl, CURLOPT_URL, $login_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //获取COOKIE并存储
    $contents = curl_exec($curl);
    curl_close($curl);


    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $verify_code_url);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $img = curl_exec($curl);
    curl_close($curl);

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

    $code = (new TesseractOCR('verifyCode.jpg'))->psm(7)->run();

	$code = explode("\n", $code);

	$code = $code[1];    echo $code.PHP_EOL;    if (strlen($code) != 4) {        return json_encode(array('code'=>500));
    }

    $data = array(        'hpzl'=>'02',        'hphm1b' => substr($car_code, -6),        'hphm' => $car_code,        'fdjh' => $fdjh,        'captcha' => $code,        'qm' => 'wf',        'page' => 1
    );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $post_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
    $result = curl_exec($curl);
    curl_close($curl);    //unlink($cookie_file);
    //unlink('verifyCode.jpg');

    return $result;
}

$count = 0;// 车牌号$car_code = '冀Dxxxxx';// 发动机后6位$fdjh = 'xxxxxx';while (true) {

    $count++;    if ($count>50) {        exit('查询失败');
    }

    $res = weizhang($car_code, $fdjh);

    $info = json_decode($res, true);    echo $res.PHP_EOL;    if ($info['code'] == 200) {        echo '车牌号: '. $car_code.PHP_EOL;        echo '未处理违章数: '.$info['data']['content']['zs'];        exit();
    }
}

执行效果

关注微信公众号:PHP技术大全

PHPer升级为大神并不难!


 
PHP技术大全 更多文章 谈谈PHP的Reload操作 亮灯问题-2016滴滴研发笔试题 51CTO专题文章之DDoS攻击原理及防护方法论 5道谷歌面试题(有答案) 一次PHP脚本执行卡住的问题排查记录
猜您喜欢 Open Auth辅助库(使用ImitateLogin实现登录) 叶亚明(Eric Ye):互联网与人生的旅行 逗逼程序猿养成记(十) 100万首付在北京只能买到六环的房子,在美国能买到什么样的房产? 自己实现的一个chrome插件