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 相关文章推荐
Content-type 的说明
Oct 09 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
PHP MVC模式在网站架构中的实现分析
Mar 04 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
PHP反射机制用法实例
Aug 28 PHP
php使用curl打开https网站的方法
Jun 17 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
Jan 04 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
PHP中的表达式简述
2016/05/29 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
jquery radio 操作代码
2011/03/16 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
python 判断一个进程是否存在
2009/04/09 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
window下eclipse安装python插件教程
2017/04/24 Python
Python中turtle库的使用实例
2019/09/09 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
HTML5标签小集
2011/08/02 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
保时捷设计:Porsche Design
2019/03/30 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
科学育儿宣传标语
2014/10/08 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
python数字图像处理实现图像的形变与缩放
2022/06/28 Python