如何将一个页面的表单数据提交至另一网站的表单?
嘿,我来帮你搞定这个表单跨站提交的问题!要把自己页面表单的数据提交到另一个网站的表单,主要有两种可行的方式,我给你详细拆解下:
方法1:直接前端提交(简单场景适用)
这种方式不需要后端介入,直接通过修改表单的action属性,或者给按钮加formaction属性就能实现。
方式A:修改整个表单的提交目标
如果所有提交都要发到目标网站,直接把表单的action换成目标表单的提交URL就行,但要注意两个关键点:
- 确保你的表单
method和目标表单一致(比如目标用POST,你也得改成method="post") - 表单里的
name属性要和目标表单的输入框名称完全匹配,不然对方收不到数据
修改后的代码示例:
<form action="http://www.example.com/target-submit.php" method="get"> First name: <input type="text" name="fname"><br> Last name: <input type="text" name="lname"><br> Comments: <input type="text" name="comments"><br> <button type="submit">提交到目标网站</button> </form>
方式B:用formaction实现多按钮提交
如果你想保留“提交到自己网站”和“提交到目标网站”两个选项,就像你代码里尝试的那样,给按钮单独加formaction属性即可。这个属性会覆盖表单本身的action,点击对应按钮时就会提交到指定的目标地址:
<form action="/action_page.php" method="get"> First name: <input type="text" name="fname"><br> Last name: <input type="text" name="lname"><br> Comments: <input type="text" name="comments"><br> <button type="submit">提交到本站</button><br> <button type="submit" formaction="http://www.example.com/target-submit.php">提交到目标网站</button> </form>
方法2:后端中转(应对跨域限制或CSRF验证)
如果直接前端提交失败(比如目标网站有CSRF防护、验证Referer,或者你不想让用户跳转到目标网站),那就需要通过自己的后端来中转数据:
- 先把表单数据提交到你自己的后端接口(比如你的
/action_page.php) - 在后端代码里,用HTTP客户端(比如PHP的
curl、Python的requests)把数据转发到目标网站的表单提交地址 - 后端处理完转发后,可以返回给用户成功提示,或者跳转到你指定的页面
举个PHP后端中转的简单示例(action_page.php):
<?php // 获取表单提交的数据 $fname = $_GET['fname']; $lname = $_GET['lname']; $comments = $_GET['comments']; // 准备要转发的数据 $data = [ 'fname' => $fname, 'lname' => $lname, 'comments' => $comments ]; // 用curl转发到目标网站 $ch = curl_init('http://www.example.com/target-submit.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); // 如果目标用POST就改成POST curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); $response = curl_exec($ch); curl_close($ch); // 处理转发后的逻辑,比如返回提示 echo "数据已提交到目标网站"; ?>
重要注意事项
- 参数匹配:一定要确认目标表单的输入框
name和你的一致,比如对方如果用first_name而不是fname,你就得把自己的inputname改成first_name - 请求方法:目标表单用
GET你就用GET,用POST就对应改成POST,不然数据会传错 - 跨域与防护:传统表单提交(非AJAX)不受CORS限制,但如果目标网站有CSRF验证,前端直接提交大概率会被拦截,这时候必须用后端中转,必要时还要先抓取目标页面的CSRF token再一起转发
内容的提问来源于stack exchange,提问作者Varoon




