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 相关文章推荐
基于mysql的bbs设计(四)
Oct 09 PHP
PHP数字格式化
Dec 06 PHP
php时间不正确的解决方法
Apr 09 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 PHP
php生成excel文件的简单方法
Feb 08 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
Zend Framework分页类用法详解
Mar 22 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
PHP如何使用JWT做Api接口身份认证的实现
Feb 03 PHP
PHP中多字节字符串操作实例详解
Aug 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
php error_log 函数的使用
2009/04/13 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
jQuery.each()用法分享
2012/07/31 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
javascript基本语法
2016/05/31 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
2016/07/12 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
Django中处理出错页面的方法
2015/07/15 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
python中Apriori算法实现讲解
2017/12/10 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
一封普通求职者的求职信
2013/11/20 职场文书
财务主管岗位职责
2014/02/28 职场文书
2014年冬季防火方案
2014/05/21 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
电视新闻稿
2015/07/17 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android