当前位置:首页 > PHP

php实现自动填表

2026-03-13 05:07:38PHP

PHP 实现自动填表的方法

使用 cURL 模拟表单提交

通过 cURL 可以模拟浏览器行为,自动向目标表单提交数据。以下是一个基本示例:

$url = 'https://example.com/form-handler.php';
$data = [
    'username' => 'testuser',
    'password' => 'testpass',
    'submit' => 'Submit'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$response = curl_exec($ch);
curl_close($ch);

使用 DOMDocument 解析和填充 HTML 表单

对于需要先解析 HTML 表单结构的场景:

$html = file_get_contents('https://example.com/form-page.html');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$form = $dom->getElementsByTagName('form')->item(0);

// 获取表单字段并填充值
$inputs = $form->getElementsByTagName('input');
foreach ($inputs as $input) {
    $name = $input->getAttribute('name');
    if ($name && isset($data[$name])) {
        $input->setAttribute('value', $data[$name]);
    }
}

// 提交处理后的表单
$updatedHtml = $dom->saveHTML();

使用 PHP 的 file_get_contents 方法

对于简单的 GET 请求表单提交:

$url = 'https://example.com/form-handler.php?' . http_build_query($data);
$response = file_get_contents($url);

处理验证码和复杂表单

对于包含验证码或动态 token 的表单:

  1. 使用 OCR 库处理简单验证码
  2. 通过会话保持获取动态 token
  3. 可能需要配合 JavaScript 解析工具
// 示例:保持会话处理
$cookieFile = tempnam(sys_get_temp_dir(), 'cookie');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com/login');
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$loginPage = curl_exec($ch);

// 提取表单中的 token
preg_match('/name="token" value="(.*?)"/', $loginPage, $matches);
$token = $matches[1] ?? '';

// 使用 token 提交表单
$data['token'] = $token;
curl_setopt($ch, CURLOPT_URL, 'https://example.com/login-handler');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$response = curl_exec($ch);
curl_close($ch);

使用第三方库

可以考虑使用以下专门处理表单的 PHP 库:

  1. Goutte:简单的 Web Scraper
  2. PHPBrowser:配合 Mink 使用
  3. Symfony DomCrawler:强大的 HTML 解析器

安装 Goutte 示例:

composer require fabpot/goutte

使用示例:

use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'https://example.com/form-page');

$form = $crawler->selectButton('Submit')->form();
$response = $client->submit($form, [
    'username' => 'testuser',
    'password' => 'testpass'
]);

处理 AJAX 表单

对于动态加载的 AJAX 表单:

php实现自动填表

  1. 分析网络请求找出真正的 API 端点
  2. 直接模拟这些 AJAX 请求
  3. 可能需要设置特定的 HTTP 头
$url = 'https://example.com/api/form-submit';
$headers = [
    'X-Requested-With: XMLHttpRequest',
    'Content-Type: application/json'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

注意事项

  1. 确保遵守目标网站的服务条款
  2. 处理可能的重定向和错误响应
  3. 考虑请求间隔避免被封禁
  4. 对于复杂场景可能需要结合多种技术

以上方法可以根据具体需求组合使用,实现不同复杂度的自动填表功能。

标签: php
分享给朋友:

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php实现短信验证

php实现短信验证

PHP实现短信验证的步骤 选择合适的短信服务提供商 国内常见的短信服务提供商包括阿里云短信、腾讯云短信、云片等。注册账号并获取API密钥和签名模板是第一步。这些平台通常提供详细的开发文档和SDK。…

php实现apk下载

php实现apk下载

实现APK下载的PHP代码 创建一个简单的PHP脚本来处理APK文件的下载请求,确保文件传输正确且安全。 <?php $file = 'path/to/your/app.apk'; if (f…