You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将一个页面的表单数据提交至另一网站的表单?

嘿,我来帮你搞定这个表单跨站提交的问题!要把自己页面表单的数据提交到另一个网站的表单,主要有两种可行的方式,我给你详细拆解下:

方法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,或者你不想让用户跳转到目标网站),那就需要通过自己的后端来中转数据:

  1. 先把表单数据提交到你自己的后端接口(比如你的/action_page.php
  2. 在后端代码里,用HTTP客户端(比如PHP的curl、Python的requests)把数据转发到目标网站的表单提交地址
  3. 后端处理完转发后,可以返回给用户成功提示,或者跳转到你指定的页面

举个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

火山引擎 最新活动