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 相关文章推荐
杏林同学录(七)
Oct 09 PHP
php 进度条实现代码
Mar 10 PHP
关于PHP5 Session生命周期介绍
Mar 02 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
PHP中require和include路径问题详解
Dec 25 PHP
在Linux系统下一键重新安装WordPress的脚本示例
Jun 30 PHP
Yii清理缓存的方法
Jan 06 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
php文件系统处理方法小结
May 23 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 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
Array of country list in PHP with Zend Framework
2011/10/17 PHP
smarty中post用法实例
2014/11/28 PHP
smarty表格换行实例
2014/12/15 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
vue车牌号校验和银行校验实战
2019/01/23 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
python计算n的阶乘的方法代码
2019/10/25 Python
python二维键值数组生成转json的例子
2019/12/06 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
班会关于环保演讲稿
2013/12/29 职场文书
新书吧创业计划书
2014/01/31 职场文书
超市中秋节促销方案
2014/03/21 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
2014年文秘工作总结
2014/11/25 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书