1

我有两种不同的远程表单,我需要向它们提交数据。第一个是 http 表单,它工作得很好。提交 > 重定向到结果页面 > 作为变量返回响应。

第二个位于 https 页面上,无论我尝试什么,它都无法正常工作。所以这就是我正在使用的:

第一个表单的表单标签

<form method="post" name="entry_form" action="a_relative_page.asp?start=1">

第二个表单的表单标签

<form method="post" novalidate enctype="multipart/form-data" action="https://asubdomain.formstack.com/forms/index.php" class="stuff" id="stuff1234567890">

两个按钮都完全不起眼,没有花哨的 javascript,看起来基本上像

<input type="submit">

这是 PHP cURL 请求

    $post_data = http_build_query(
        array(
            'lots_of'   => 'values_here'
        )
    );
    $url = 'https://asubdomain.formstack.com/forms/a_page_with_form';
    $ch = curl_init($url);
    $opts = array(
        CURLOPT_SSL_VERIFYPEER  => FALSE,
        CURLOPT_SSL_VERIFYHOST  => FALSE,
        CURLOPT_UNRESTRICTED_AUTH => TRUE,
        CURLOPT_VERBOSE => TRUE,
        // Above options for debugging because I'm desperate
        CURLOPT_CONNECTTIMEOUT  => 30,
        CURLOPT_USERAGENT       => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
        CURLOPT_RETURNTRANSFER  => TRUE,
        CURLOPT_FOLLOWLOCATION  => TRUE,
        CURLOPT_POST            => TRUE,
        CURLOPT_POSTFIELDS      => $post_data
    ); 
    curl_setopt_array($ch, $opts); 

    //Capture result and close connection
    $result = curl_exec($ch);
    $debug  = curl_getinfo($ch);
    curl_close($ch);

curl_getinfo 中没有任何异常,除了预期 ["ssl_verify_result"]=> int(0)的,我在调试时忽略了它。HTTP 代码是 200。如果我回显 $result,我可以看到所有表单值都已填写,但表单从未提交,因此从未重定向。如果我然后单击提交,则表单将毫无问题地提交并按预期重定向。

同样,这不是第一种形式的问题,只有第二种形式。我猜想formstack上的底层代码会阻止cURL POST提交表单,但我似乎找不到它。

编辑:我发现了问题。formstack 表单上有两个不可见的元素。其中一个是名为 _submit 的输入字段,必须设置为 1。另一个是表单标识符,它是一个整数。

4

0 回答 0