curl提交登陆信息遇到验证码问题
验证码,目前是找到URL,在前端网页上直接显示,然后手动输入。
在网页上用AJAX提交登陆信息可以正确返回。
我将同样的组合好的信息,传入后台PHP文件中,用curl提交,但每次都报验证码错误。
感觉起来好像是在php中提交又刷新了一次验证码,请问这个需要怎么解决?
借用了ty0716的代码试了一下,还是有一些问题,不明白要怎么处理。
直接取验证码地址,没有cookie保存。用登陆页面的地址,没办法取验证码来识别。
define('SCRIPT_ROOT',dirname(__FILE__).'/'); include "code.php"; function send($loginUrl, $cookieFile){ // $name = $_POST['name']; // $idcard = $_POST['idcard']; // $pw = $_POST['pw']; // $code = $_POST['code']; $code = getCode('http://www.xxx.com/Num.jsp'); header("Content-Type: text/html;charset=utf-8"); $post_data = "".$code; return post($loginUrl, $post_data, $cookieFile); } function getCode($captchaUrl, $cookieFile){ $captchaString = get($captchaUrl, $cookieFile); $tempCaptchaFile = SCRIPT_ROOT. date('YmdHis') . '.jpg'; file_put_contents($tempCaptchaFile, $captchaString); $ocr = new code($tempCaptchaFile); $captcha = $ocr->getCode(); echo $captcha; return $captcha; } function get($url, $cookie_file, $isCookiesSave = false) { // 初始化 $curl = curl_init($url); $header = array(); $header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'; curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // 不输出header头信息 curl_setopt($curl, CURLOPT_HEADER, 0); if ($isCookiesSave) { curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); } else { curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); } // 保存到字符串而不是输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 是否抓取跳转后的页面 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); $info = curl_exec($curl); curl_close($curl); return $info; } function post($url, $data, $cookie_file) { // 初始化 $curl = curl_init($url); $header = array(); $header[0] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'; curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // 不输出header头信息 curl_setopt($curl, CURLOPT_HEADER, 0); // 保存到字符串而不是输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); // post数据 curl_setopt($curl, CURLOPT_POST, 1); // 请求数据 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // 是否抓取跳转后的页面 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); $response = curl_exec($curl); curl_close($curl); return $response; }
回复内容:
验证码,目前是找到URL,在前端网页上直接显示,然后手动输入。
在网页上用AJAX提交登陆信息可以正确返回。
我将同样的组合好的信息,传入后台PHP文件中,用curl提交,但每次都报验证码错误。
感觉起来好像是在php中提交又刷新了一次验证码,请问这个需要怎么解决?
借用了ty0716的代码试了一下,还是有一些问题,不明白要怎么处理。
直接取验证码地址,没有cookie保存。用登陆页面的地址,没办法取验证码来识别。
define('SCRIPT_ROOT',dirname(__FILE__).'/'); include "code.php"; function send($loginUrl, $cookieFile){ // $name = $_POST['name']; // $idcard = $_POST['idcard']; // $pw = $_POST['pw']; // $code = $_POST['code']; $code = getCode('http://www.xxx.com/Num.jsp'); header("Content-Type: text/html;charset=utf-8"); $post_data = "".$code; return post($loginUrl, $post_data, $cookieFile); } function getCode($captchaUrl, $cookieFile){ $captchaString = get($captchaUrl, $cookieFile); $tempCaptchaFile = SCRIPT_ROOT. date('YmdHis') . '.jpg'; file_put_contents($tempCaptchaFile, $captchaString); $ocr = new code($tempCaptchaFile); $captcha = $ocr->getCode(); echo $captcha; return $captcha; } function get($url, $cookie_file, $isCookiesSave = false) { // 初始化 $curl = curl_init($url); $header = array(); $header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'; curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // 不输出header头信息 curl_setopt($curl, CURLOPT_HEADER, 0); if ($isCookiesSave) { curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); } else { curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); } // 保存到字符串而不是输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 是否抓取跳转后的页面 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); $info = curl_exec($curl); curl_close($curl); return $info; } function post($url, $data, $cookie_file) { // 初始化 $curl = curl_init($url); $header = array(); $header[0] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'; curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // 不输出header头信息 curl_setopt($curl, CURLOPT_HEADER, 0); // 保存到字符串而不是输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); // post数据 curl_setopt($curl, CURLOPT_POST, 1); // 请求数据 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // 是否抓取跳转后的页面 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); $response = curl_exec($curl); curl_close($curl); return $response; }
你在第一次获取页面的时候,要保存cookie,然后把你的登录信息、验证码,连着那个cookie一起post过去。如果你直接post,你的验证码永远对应的都是上一次的验证码
看了下,这样的验证码可以做个验证码识别,参考我的一篇文章:https://segmentfault.com/a/1190000004361370
你需要保证提交post的session_id与验证码的session_id一致,否则就是验证码错误了。
验证码由你的程序来输出,
用php获取验证码后输出,你再去调用一次要么是过期的验证码,要么就不是你这个session_id的验证码了
找到验证码的URL,在提交的时候请求一个验证码,听过识别,或者是手动输入

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는
