如何从远程服务器自动提交(POST)表单?

时间:2015-06-02 11:11:20

标签: php forms curl form-submit snoopy

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

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

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

class QuestionSerializer(serializers.ModelSerializer):
    answers = serializers.SerializerMethodField()

    class Meta:
        model = Question
        fields = ('id', 'answers', 'created_at', 'text', 'user_id',)

    def get_answers(self,obj):
        ans_set = AnswerSerializer(Answer.objects.filter(question=obj),many=True)
        return ans_set

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

由于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);

您可以通过查看浏览器的控制台找到该网址:

form post

您的请求可能会被阻止,因为它来自其他服务器,但您可以尝试一下。如果你想“模仿”普通访问者,你可以从设置用户代理字符串开始,也可以修改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');

答案 1 :(得分:1)

&#13;
&#13;
$(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);
}
&#13;
&#13;
&#13; 检查更多JQuery AJAX auto submit form

的链接