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学习 运算符与运算符优先级
Jun 15 PHP
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
PHP header函数分析详解
Aug 06 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
提高php运行速度的一些小技巧分享
Jul 03 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
php 删除cookie方法详解
Dec 01 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
PHP图片加水印实现方法
May 06 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 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 和 HTML
2006/10/09 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
js用图作提交按钮或超连接
2008/03/26 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
javascript arguments使用示例
2014/12/16 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python实现简单名片管理系统
2018/11/30 Python
python异步存储数据详解
2019/03/19 Python
详解python深浅拷贝区别
2019/06/24 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
经济管理专业求职信
2014/06/09 职场文书
毕业生求职信范文
2014/06/29 职场文书
甘南现象心得体会
2014/09/11 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
教师党员个人自我评价
2015/03/04 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
Node实现搜索框进行模糊查询
2021/06/28 Javascript
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题