Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何以编程方式执行包含;文件";键入上传输入字段?_File_Url_Upload_Cgi - Fatal编程技术网

File 如何以编程方式执行包含;文件";键入上传输入字段?

File 如何以编程方式执行包含;文件";键入上传输入字段?,file,url,upload,cgi,File,Url,Upload,Cgi,我刚刚用Perl编写了一个简单的web服务,它显示一个web表单,其中包含一个“文件”类型的上载字段和一个提交按钮。我制作这个简单的网页的目的是让一个人可以使用它,也让另一台机器上的脚本可以通过编程执行它。我已经完成并测试了人的部分,现在我才意识到我不知道如何在第二台机器上构建一个URL,在第一台机器上成功地执行这个cgi脚本(并从第二台机器上传一个文件到第一台机器) 我确实有一些构建包含表单字段的URL的经验,但以前从未使用过“文件”类型的上传输入字段,所以我有点纠结于此。也许我用错了 如果我

我刚刚用Perl编写了一个简单的web服务,它显示一个web表单,其中包含一个“文件”类型的上载字段和一个提交按钮。我制作这个简单的网页的目的是让一个人可以使用它,也让另一台机器上的脚本可以通过编程执行它。我已经完成并测试了人的部分,现在我才意识到我不知道如何在第二台机器上构建一个URL,在第一台机器上成功地执行这个cgi脚本(并从第二台机器上传一个文件到第一台机器)

我确实有一些构建包含表单字段的URL的经验,但以前从未使用过“文件”类型的上传输入字段,所以我有点纠结于此。也许我用错了

如果我的简单web服务是一个名为“myscript.pl”的cgi bin脚本,如果文件上载字段名为“uploadthis”,并且如果我想通过编程上传的第二台机器上的文件位于“C:\myfile.txt”中,那么我不应该在第二台机器上的脚本中构造一个URL,格式是“:\myfile.txt”这个文件是通过程序上传的,就像一个人手动点击了web表单上的浏览按钮,选择了那个文件,然后点击了提交按钮一样

当我在第一台机器上打开cgi脚本表单并浏览到文件并单击Submit时,它可以手动正常工作。该文件似乎可以通过网络浏览器上传。但是,当我在浏览器中键入上述URL以手动测试文件上载URL,然后再将该URL编程到另一台机器上的脚本中时,上载的文件是一个零长度文件。它创建了一个文件,但它是完全空的。如果使用已知的错误文件名,如“:\MyFileThatDoesnTexsist.txt”,则会得到相同的结果。我做错了什么


我正试图在两台装有Apache 2.2和ActivePerl 5.10.0的Windows XP PC上完成这项任务,表单方法是“post”。

首先,post参数不会出现在URL的末尾。此外,不可能从浏览器(甚至不使用JavaScript)完全自动发送文件上载,只是为了防止用户按需上载

如果要从浏览器上载,则必须始终选择文件或在框中键入文件名,或手动单击“提交”按钮。如果所有这些都是自动化的,则不会上载文件

要以编程方式测试文件上载,可以使用curl:

curl -F "uploadthis=@C:\myfile.txt" http://machine1/cgi-bin/myscript.pl

当然,您也可以编写一个程序,将文件作为多部分/表单数据发布。

您应该将这些模块用作或。两者都有文件上传的例子。WWW::Mechanize更简单,但您应该只从ppm安装它。LWP包含在ActiveState中。

短语“多部分/表单数据”是我完全忽略的东西。当我搜索这个短语时,我找到了答案

与下面的示例类似的是我如何通过perl脚本解决问题:

use HTTP::Request::Common;
use LWP::UserAgent;

$ua = LWP::UserAgent->new;

my $response = $ua->request(
    POST 'http://machine1/cgi-bin/myscript.pl',
    Content_Type => 'form-data',
    Content      => [ 
                        uploadthis => ["C:\myfile.txt"],
                    ]
    );

if ($response->is_success) {
    print "Success.";
}
else {
    print "Failure.";
}