当前位置:首页 > PHP

php实现自动填表

2026-01-30 08:19:35PHP

PHP实现自动填表的方法

使用PHP实现自动填表可以通过多种方式完成,主要取决于目标表单的类型和提交方式。以下是几种常见的方法:

cURL库提交表单数据

PHP的cURL库可以模拟浏览器提交表单数据。需要构建POST或GET请求,并设置必要的头部信息。

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

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

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

file_get_contents提交表单

对于简单的表单提交,可以使用file_get_contents结合stream_context_create。

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

$options = [
    'http' => [
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data)
    ]
];

$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);

使用Guzzle HTTP客户端

php实现自动填表

Guzzle是一个流行的PHP HTTP客户端,可以更简洁地处理表单提交。

require 'vendor/autoload.php';

$client = new \GuzzleHttp\Client();
$response = $client->post('https://example.com/form-submit', [
    'form_params' => [
        'username' => 'testuser',
        'password' => 'testpass'
    ]
]);

$body = $response->getBody();

处理JavaScript渲染的表单

对于需要执行JavaScript的表单,可以使用PHP结合无头浏览器如Puppeteer。

php实现自动填表

// 需要安装chrome-php/chrome
use HeadlessChromium\BrowserFactory;

$browserFactory = new BrowserFactory();
$browser = $browserFactory->createBrowser();

$page = $browser->createPage();
$page->navigate('https://example.com/form')->waitForNavigation();

$page->evaluate('document.querySelector("#username").value = "testuser"');
$page->evaluate('document.querySelector("#password").value = "testpass"');
$page->evaluate('document.querySelector("form").submit()');

$browser->close();

处理CSRF令牌

许多表单包含CSRF保护,需要先获取令牌再提交。

// 首先获取包含CSRF令牌的页面
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com/form');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);

// 解析HTML获取CSRF令牌
preg_match('/name="csrf_token" value="(.*?)"/', $html, $matches);
$csrf_token = $matches[1];

// 使用令牌提交表单
$data = [
    'username' => 'testuser',
    'password' => 'testpass',
    'csrf_token' => $csrf_token
];
curl_setopt($ch, CURLOPT_URL, 'https://example.com/form-submit');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$response = curl_exec($ch);
curl_close($ch);

处理验证码

对于有验证码的表单,可以集成第三方验证码识别服务或使用OCR技术。

// 获取验证码图片
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com/captcha.jpg');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$captcha_image = curl_exec($ch);

// 保存图片并发送到验证码识别API
file_put_contents('captcha.jpg', $captcha_image);
$captcha_text = file_get_contents('http://captcha-api.com/recognize?image=captcha.jpg');

// 提交带验证码的表单
$data = [
    'username' => 'testuser',
    'password' => 'testpass',
    'captcha' => $captcha_text
];
curl_setopt($ch, CURLOPT_URL, 'https://example.com/form-submit');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$response = curl_exec($ch);
curl_close($ch);

注意事项

自动填表可能违反某些网站的服务条款,使用前应确保获得授权。处理敏感数据时要特别注意安全性,避免在代码中硬编码凭证。对于复杂的表单交互,可能需要模拟完整的用户会话,包括cookie管理。

标签: php
分享给朋友:

相关文章

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开:…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $n…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HT…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…