我有两种不同的远程表单,我需要向它们提交数据。第一个是 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。另一个是表单标识符,它是一个整数。