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 相关文章推荐
php 获取完整url地址
Dec 20 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
VIM中设置php自动缩进为4个空格的方法详解
Jun 14 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 PHP
PHP日期和时间函数的使用示例详解
Aug 06 PHP
PHP基于进程控制函数实现多线程
Dec 09 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下使用SMTP发邮件的代码
2008/01/10 PHP
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
服务器web工具 php环境下
2010/12/29 PHP
php网站地图生成类示例
2014/01/13 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
Django 外键的使用方法详解
2019/07/19 Python
django序列化serializers过程解析
2019/12/14 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
大学毕业感言50字
2014/02/07 职场文书
见习报告的格式
2014/11/04 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL