PHP脚本自动识别验证码查询汽车违章

 更新时间:2016年12月20日 11:17:25   作者:松鼠先生  
经常有查下自己的车有没有违章,所以写了现在这个脚本,帮助查询自己的车是否违章。主要用到,带cookie模拟表单提交和验证码识别。具体脚本写法一起通过本文学习吧

经常有查下自己的车有没有违章,所以写了现在这个脚本,帮助查询自己的车是否违章。

主要用到,带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发送get、post请求的6种方法简明总结

    php发送get、post请求的6种方法简明总结

    这篇文章主要介绍了php发送get、post请求的6种方法简明总结,分别为使用file_get_contents 、fopen、fsockopen、curl来发送GET和POST请求,需要的朋友可以参考下
    2014-07-07
  • PHP学习之预定义变量(实例讲解)

    PHP学习之预定义变量(实例讲解)

    下面小编就为大家分享一篇PHP学习之预定义变量(实例讲解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • php如何把表单内容提交到数据库

    php如何把表单内容提交到数据库

    这篇文章主要介绍了php如何吧表单内容提交到数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解

    ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解

    这篇文章主要介绍了ThinkPHP框架整合微信支付之Native 扫码支付模式,结合图文形式详细分析了thinkPHP整合微信扫码支付功能的具体步骤与相关操作技巧,以及与模式一的区别,需要的朋友可以参考下
    2019-04-04
  • PHP+MySQL实现在线测试答题实例

    PHP+MySQL实现在线测试答题实例

    本文通过实例主要给大家介绍如何使用jQuery+PHP+MySQL来实现在线测试题,包括动态读取题目,答题完毕后台评分,并返回答题结果,感兴趣的朋友跟随小编一起看看吧
    2020-01-01
  • PHP+jQuery翻板抽奖功能实现

    PHP+jQuery翻板抽奖功能实现

    在电视节目中有一种抽奖形式暂且叫做翻板抽奖,台上有一个墙面,墙面放置几个大方块,主持人或者抽奖者翻开对应的方块即可揭晓中奖结果。类似的抽奖形式还可以应用在WEB中,本文将使用PHP+jQuery为您讲解如何实现翻板抽奖程序。
    2015-10-10
  • 分享下页面关键字抓取components.arrow.com站点代码

    分享下页面关键字抓取components.arrow.com站点代码

    这篇文章主要介绍了分享下页面关键字抓取components.arrow.com站点代码的相关资料,需要的朋友可以参考下
    2014-01-01
  • thinkPHP使用pclzip打包备份mysql数据库的方法

    thinkPHP使用pclzip打包备份mysql数据库的方法

    这篇文章主要介绍了thinkPHP使用pclzip打包备份mysql数据库的方法,结合实例形式分析了thinkPHP使用pclzip操作压缩文件的相关技巧,需要的朋友可以参考下
    2016-04-04
  • phpstorm激活码2020附使用详细教程

    phpstorm激活码2020附使用详细教程

    这篇文章主要介绍了phpstorm激活码2020附使用详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • thinkPHP5.0框架应用请求生命周期分析

    thinkPHP5.0框架应用请求生命周期分析

    这篇文章主要介绍了thinkPHP5.0框架应用请求生命周期,较为详细的分析了thinkPHP5.0框架应用请求生命周期所涉及的各个执行流程,需要的朋友可以参考下
    2017-03-03

最新评论