未激发PHP cURL填充值表单操作
我有两个不同的远程表单需要提交数据。第一个是http表单,它可以正常工作。提交>重定向到结果页>将响应作为变量返回 第二个存在于https页面上,不管我怎么做,它都不起作用。以下是我的工作内容: 第一个表单的表单标签未激发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-
<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);