使用PHP cURL复制表单操作

使用PHP cURL复制表单操作,php,html,forms,curl,Php,Html,Forms,Curl,我目前正在构建一个webapp,它构建在ODK聚合服务器和Collect应用程序之上。前端从用户收集数据,并将其转换为XML文件,该文件与上载到的服务器兼容 我已经分阶段开发了它,因为我正在从它的/formUpload位置(一个外部位置)自动上传到服务器。当使用接收文件输入的表单时,我在表单操作中拥有/formUpload位置的完整url。当我这么做的时候,一切都很好 但是,由于表单数据将动态生成xml,而不是从文件输入中获取,因此我需要找到另一种方法将此xml文件提交到服务器。我一整天都在试图

我目前正在构建一个webapp,它构建在ODK聚合服务器和Collect应用程序之上。前端从用户收集数据,并将其转换为XML文件,该文件与上载到的服务器兼容

我已经分阶段开发了它,因为我正在从它的/formUpload位置(一个外部位置)自动上传到服务器。当使用接收文件输入的表单时,我在表单操作中拥有/formUpload位置的完整url。当我这么做的时候,一切都很好

但是,由于表单数据将动态生成xml,而不是从文件输入中获取,因此我需要找到另一种方法将此xml文件提交到服务器。我一整天都在试图用cURL让它工作,但没有成功。返回的错误消息如下所示:

错误:未收到表单名称或表单XML说明

我的结论是,这是由于所提交内容的差异造成的。虽然我提交的文件肯定与多部分/表单数据相同,但我觉得PHP提交的格式必须与HTML表单的格式略有不同

有人知道在cURL请求中HTML表单应该是什么样子的吗?以下是两组数据:

表格:


表单定义(xml文件):
可选媒体文件:
PHP:


“@”。$dest,
“数据文件”=>“
));
curl_setopt($request,CURLOPT_RETURNTRANSFER,true);
curl_setopt($request,CURLOPT_SSL_VERIFYPEER,false);
echo curl_exec($request);
if(curl_错误($request))
{
回显“错误:”.curl_错误($request);
}
//结束会议
卷曲关闭($请求);
}
?>
还要注意的是,如果其中任何一个PHP看起来很糟糕,那是因为它可能很糟糕。我以前从未使用过它,在那里所做的每件事都是从任何地方抓取资源,然后用这个表单做我需要做的事情

非常感谢所有的帮助


谢谢。

我认为你的卷发要求没有问题。此错误看起来可能是由XML问题引起的。我认为这是您从第三方Java库中得到的错误。卷曲柱是合适的。在您的代码中,
$\u POST[“xmlDoc”]
是否确实包含任何内容,或者它是一个空字符串?这个错误消息可能源于空的或无效的XML,我不认为是这种情况,因为我能够回显该变量并看到正确的信息。当我按下submit键时,会调用一个JS函数来生成xml文件,并通过AJAX调用将其传递给php。否则,您是否使用PHP5.5或更新版本?
<form id="ie_backward_compatible_form" action='upload.php'
      enctype="multipart/form-data" encoding="multipart/form-data"
      method="POST" accept-charset="UTF-8">

    <table id="uploadTable">
        <tbody>
        <tr>
            <td>
                <label for="form_def_file">Form definition (xml file):</label>
            </td>

            <td>
                <input id="form_def_file" class="gwt-Button" type="file"
                       name="form_def_file" size="80">
            </td>
        </tr>

        <tr>
            <td>
                <label for="mediaFiles">Optional Media file(s):</label>
            </td>

            <td>
                <input id="mediaFiles" class="gwt-Button" type="file"
                       multiple="" name="datafile" size="80,20">
                <input id="clear_media_files" class="gwt-Button"
                       type="button"
                       onclick="clearMediaInputField('mediaFiles')"
                       value="Clear">
            </td>
        </tr>

        <tr>
            <td>
                <input class="gwt-Button" type="button"
                       value="Upload Form" name="button" onclick="submitXML()">
            </td>
        </tr>
        </tbody>
    </table>
</form>
<?php

if (!empty ($_POST['xmlDoc']))
{
    $milliseconds = round(microtime(true) * 1000);
    $doc = $_POST["xmlDoc"];
    $dest = "uploads/tmp/tmp_".$milliseconds.".xml";

    file_put_contents($dest , $doc );

    // initialise the curl request
    $request = curl_init('https://odk-aggregate-test-158709.appspot.com/formUpload');
    curl_setopt($request, CURLOPT_POST, true);
    curl_setopt(
        $request,
        CURLOPT_POSTFIELDS,
        array(
            'form_def_file' =>
                '@'.$dest ,
            'datafile' => ''
        ));

    curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
    echo curl_exec($request);

    if(curl_error($request))
    {
        echo 'error:' . curl_error($request);
    }
    // close the session
    curl_close($request);
}

?>