【问题标题】:How to automatically submit a (POST) form from remote server?如何从远程服务器自动提交(POST)表单?
【发布时间】:2015-06-02 11:11:20
【问题描述】:

我正在尝试自动填写字段并在另一台服务器上提交表单。我对目标页面和服务器没有任何控制权。

我尝试使用 Snoopy 类编写运行 php 代码来完成这项工作,但它不起作用(描述 here

我尝试填写并自动提交的页面是:http://example.com/?page=a,页面来源如下:

<form action="" method="post" class="horizontal-form" role="form" >
<input type="hidden" name="submit_form" value="true" />
<input type="text" name="field_name" class="form-control" value="" >
<button type="submit" class="btn"><i class="icon-ok"></i> Send</button>
</form>

知道如何使用我自己网站上的脚本/php 代码自动填写“field_name”并自动提交此表单吗? 我想我也可以使用 CURL 来做,但我是新手,不知道怎么做。 :(

感谢您的帮助。

【问题讨论】:

  • 您可以使用jquery中的提交功能使用jquery自动提交,
  • @AnantaPrasadLoda 谢谢。我知道如果我可以控制表单所在的页面,我可以使用 jquery,但我无法控制该页面。我仍然可以使用 jquery 在另一个网页中自动提交表单吗?怎么样?
  • 当然。让我试试你的建议。

标签: php forms curl form-submit snoopy


【解决方案1】:

您不能使用 php 填写表单,因为 php 是一种服务器端语言。您可以使用 javascript 填写表格。有一些框架可以做到这一点(phantomjs、casperjs)。

您可以尝试在 PHP 中使用 curl 直接发布表单数据。

<?php

$data = array(
    'submit_form' => 1,
    'field_name' => 'your value here',
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/post-url");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$output = curl_exec($ch);
$info = curl_getinfo($ch);

curl_close($ch);

您可以在浏览器的控制台中找到该网址:

您的请求可能会被阻止,因为它来自另一台服务器,但您可以尝试一下。如果您想“模仿”普通访问者,您可以从设置用户代理字符串开始,也可以修改 HTTP_REFERER。

curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36');
curl_setopt($ch, CURLOPT_REFERER, 'http://www.example.com/the-url-of-the-form');

【讨论】:

  • 感谢您的帖子。我尝试了这段代码,包括用户代理和推荐人。无法让它工作。也许我需要设置饼干?!这是在 CURL 中设置 cookie 的正确语法吗? curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: PHPSESSID=cookie1; PHPSESSID2=cookie2; "));或者这个: 4)curl_setopt($ch, CURLOPT_COOKIE, "PHPSESSID=cookie1; PHPSESSID2=cookie2; ");
  • 什么不完全,你能提出要求吗?你有什么反应?
  • 运行代码后,结果是目标页面的html代码,和目标网站上的一模一样。这不好,因为如果 POST 成功,结果页面应该包含一个 div 部分,说明“field_name”格式不正确或提交成功。
【解决方案2】:

$(document).ready(function(){
    $('#form1').submit(ajax);
})
function ajax(){
        $.ajax({
            url : 'inserir.php',
            type : 'POST',
            data : $('form').serialize(),
            success: function(data){
                $('#resultado').html(data);
            }
        });
        return false;
}
...
window.onload=function(){
    setInterval(ajax, 5000);
}
查看更多链接JQuery AJAX auto submit form

【讨论】:

  • 即使我无法控制包含表单的目标网站,这项工作是否可行?
  • 不,不会因为跨域策略!
猜你喜欢
  • 2011-12-19
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
相关资源
最近更新 更多