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