未激发PHP cURL填充值表单操作

未激发PHP cURL填充值表单操作,php,forms,redirect,curl,formstack,Php,Forms,Redirect,Curl,Formstack,我有两个不同的远程表单需要提交数据。第一个是http表单,它可以正常工作。提交>重定向到结果页>将响应作为变量返回 第二个存在于https页面上,不管我怎么做,它都不起作用。以下是我的工作内容: 第一个表单的表单标签 <form method="post" name="entry_form" action="a_relative_page.asp?start=1"> <form method="post" novalidate enctype="multipart/form-

我有两个不同的远程表单需要提交数据。第一个是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">
除了预期的
[“ssl\u verify\u result”]=>int(0)
,curl\u getinfo中没有什么与众不同的地方,我在调试时会忽略它。 HTTP代码是200。如果我回显$result,我可以看到所有表单值都已填写,但表单从未提交,因此也从未重定向。如果我单击submit,表单将无问题提交,并按预期重定向

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


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

为什么要将curl运行到表单的url而不是表单提交到的url?您的浏览器使用“多部分/表单数据”编码,而curl使用“application/x-www-form-urlencoded”编码,因为您使用的是http\u build\u查询。检查来自的注释。有些服务器对此很敏感。(PHP,默认情况下,对userland PHP代码不在乎,也不进行透明解码。因此,由于PHP非常流行,大多数网站都不在乎,但那些不是用PHP编写的网站可能会在乎)这是个好主意,但我也试着将其作为数组提交。无益。显然formstack有一个API。因此,我可能只需要学习API。为什么要将curl运行到表单的url而不是表单提交到的url?您的浏览器使用“多部分/表单数据”编码,而curl使用“application/x-www-form-urlencoded”编码,因为您使用的是http\u build\u查询。检查来自的注释。有些服务器对此很敏感。(PHP,默认情况下,对userland PHP代码不在乎,也不进行透明解码。因此,由于PHP非常流行,大多数网站都不在乎,但那些不是用PHP编写的网站可能会在乎)这是个好主意,但我也试着将其作为数组提交。无益。显然formstack有一个API。所以我可能只需要学习API。
<input type="submit">
    $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);