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


Posted in PHP onDecember 20, 2016

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

主要用到,带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

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

PHP

<?php
require '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脚本自动识别验证码查询汽车违章

以上所述是小编给大家介绍的PHP脚本自动识别验证码查询汽车违章,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
ajax缓存问题解决途径
Dec 06 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
php实现encode64编码类实例
Mar 24 PHP
PHP连接access数据库
Mar 27 PHP
php实现的农历算法实例
Aug 11 PHP
PHP判断上传文件类型的解决办法
Oct 20 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
PHP解决中文乱码
Apr 28 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
php获取POST数据的三种方法实例详解
Dec 20 #PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 #PHP
Discuz论坛密码与密保加密规则
Dec 19 #PHP
yii框架搜索分页modle写法
Dec 19 #PHP
YII框架中搜索分页jQuery写法详解
Dec 19 #PHP
Yii2――使用数据库操作汇总(增删查改、事务)
Dec 19 #PHP
利用PHP抓取百度阅读的方法示例
Dec 18 #PHP
You might like
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
微信支付开发交易通知实例
2016/07/12 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
php数组遍历类与用法示例
2019/05/24 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
Python使用minidom读写xml的方法
2015/06/03 Python
详解Python编程中包的概念与管理
2015/10/16 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
Python-opencv 双线性插值实例
2020/01/17 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
Solaris操作系统的线程机制
2015/07/28 面试题
捐款倡议书范文
2014/02/02 职场文书
大学军训感言200字
2014/02/26 职场文书
洗发水广告词
2014/03/13 职场文书
代理协议书
2014/04/22 职场文书
网络管理员岗位职责
2015/02/12 职场文书
小学语文国培研修日志
2015/11/13 职场文书
python常见的占位符总结及用法
2021/07/02 Python