【问题标题】:How can I POST a multipart HTTP request from Perl to Java and get a response?如何从 Perl 向 Java 发布多部分 HTTP 请求并获得响应?
【发布时间】:2010-02-25 13:02:29
【问题描述】:

我正在尝试从我在 Perl 中的一个子例程中向基于 Java 的控制器发出请求。 但我没有得到任何回应。我知道 Java 代码工作文件,因为如果我从 HTML 表单发布到它,我可以获得响应。

这是我的 Perl 代码:

  use HTTP::Request::Common;
  my $ua = LWP::UserAgent->new;

  my $response = $ua->request(POST 'http://testserver/testing.nc',
        Content_Type => 'form-data',
        Content => [
            method => 'submit',
            ftp_server => 'ftp.localhost',
            ftp_user => 'testuser',
            ftp_password => 'testpass',
            remote_path => '/home/files',
            port => 22,
            file_to_upload => ["$file"]
  ]);

这段代码有问题吗?

【问题讨论】:

  • 为什么有 ftp_server 行?你用的是http还是ftp?如果您打算将 ftp 站点上的文件发布到 Web 服务器,是否需要分两步完成?我很困惑。
  • 我的猜测是 testing.nc 脚本应该将文件传输到 FTP 站点。
  • 也许吧。如果他想上传文件并且他可以访问 ftp 服务器,并且知道 ftp 服务器的用户/密码,那么如果他愿意和/或雇主允许,他可以使用 perl 模块直接进行传输。 Goe——你知道这段代码或脚本在正常工作时应该做什么吗?

标签: perl post httprequest multipartform-data


【解决方案1】:

已发布数据must be of type multipart/form-data

编辑:好的,事实证明,指定form-data 就足够了,正如HTTP::Request::Common 文档中提到的那样:

POST 方法还支持用于 RFC 1867 中指定的基于表单的文件上传的 multipart/form-data 内容。您可以通过将 form-data 的内容类型指定为请求标头之一来触发此内容格式。

但是,要以您使用的方式使用HTTP::Request::Common::POST,您需要导入POST

use HTTP::Request::Common qw(POST);

或使用$ua->post:

LWP::UserAgentpost(...) 方法作为$ua->request(POST ...) 的快捷方式存在。

您可以使用WWW::Mechanize 让您的生活更轻松。另见this upload example

【讨论】:

  • 你到底是什么意思?我在第 5 行定义了 Content_Type asd 'form-data'
  • "form-data" != "multipart/form-data"
  • 好吧,我从“kobesearch.cpan.org/htdocs/libwww-perl/HTTP/Request/…”中获取了这个例子,他们使用“form-data”,而且 POST 和实际 URL 之间没有逗号
  • 好的,我正在使用 $ua->post。因为我试图在同一个应用程序中发布请求,所以有一种方法可以使用 URL 的相对路径,例如: $ua->post('testing.nc') ,当我尝试得到“路径有是绝对的”在回应中。
猜你喜欢
  • 2017-07-29
  • 1970-01-01
  • 2020-02-08
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 2017-05-16
相关资源
最近更新 更多