【问题标题】:Parse multipart/form-data in Perl在 Perl 中解析 multipart/form-data
【发布时间】:2013-12-11 14:43:45
【问题描述】:

我正在开发一个 perl 程序,它以多部分 MIME 的形式将数据发布到 Web 服务。我从服务器收到了以下数据。我使用HTTP::Request::Common模块提交数据。

如何在 perl 中解析以下数据。

_内容:

--AaioCdPr
Content-Disposition: form-data; name="AAA"

TMP
--AaioCdPr
Content-Disposition: form-data; name="BBB"

TEST
--AaioCdPr
Content-Disposition: form-data; name="BBBBCC"

TEST
--AaioCdPr

【问题讨论】:

  • 你收到的数据有CGI请求吗?如果是这样,CGI 模块就可以了。
  • 我不认为 CGI 可以在这里做任何事情。我使用以下 sn-p 代码来发布数据。我的 $usrag1 = LWP::UserAgent->new();我的 ($req1,$response1); $req1=POST(example.com/webservice, Content_Type => 'multipart/form-data', Content => [ Type => "XXXX", Mode => "XXXXX" ] ); $response1 = $usrag1->request($req1);
  • 来自 web 服务的响应为:- ($response1 的内容) '_rc' => '200', '_headers' => bless( { 'x-powered-by' => 'Servlet 2.5; JBoss-5.0/JBossWeb-2.1', 'XXXXXX' => 1 }, 'HTTP::Headers' ), '_msg' => 'OK', '_request' => bless( { '_content' => '-- xYzZY 内容配置:form-data; name="AAAA" BBBBBB --xYzZY 内容配置:form-data; name="CCCCCC" DDDDDDDD --xYzZY
  • 我能够通过模式匹配拆分 \r\n & 来处理 _content。我只是在寻找是否存在标准方法。
  • 关于“我不认为 CGI 可以在这里做任何事情。”,我从来没有说过。您没有收到来自 CGI 请求的数据,因此使用 CGI 的建议不适用。

标签: perl parsing multipartform-data


【解决方案1】:

nb4:“你试过什么?”

似乎您可以使用正则表达式提取您想要的信息:(?:(\w+)\r\n)?--AaioCdPr\r\nContent-Disposition: form-data; name="(\w+)"

$1 将包含您的字符串,例如“TMP”或“TEST”,$2 将包含您的字符串,例如“BBB”或“BBBBCC”

【讨论】:

  • 嗨乔纳森,我为此尝试了正则表达式和模式匹配并发现工作正常。我想知道是否有任何标准方法来解析这种表单中的数据。因为我从服务器返回了一个带有完整 http 标头和内容的变量 $response。
  • Respose like : '_rc' => '200', '_headers' => bless( { 'x-powered-by' => 'Servlet 2.5; JBoss-5.0/JBossWeb-2.1', 'XXXXXX' => 1 }, 'HTTP::Headers' ), '_msg' => 'OK', '_request' => bless( { '_content' => '--xYzZY Content-Disposition: form-data; name="AAAA" BBBBBB --xYzZY Content-Disposition: form-data; name="CCCCCC" DDDDDDDD --xYzZY – IAM 能够处理 _content,但正在寻找替代方案。
  • 哈哈,我有点难以理解将所有内容压缩成评论的情况。如果此正则表达式符合您的要求,我建议您接受此答案并发布一个带有标题的新问题,以及您希望从中提取的内容。 Perl 是一种非常适合字符串处理的语言,我们甚至可以找到解决您问题的单行方案。我只需要清楚地定义它。
【解决方案2】:

我在 CPAN 上的 MIME 的前五个 search results 中看到了 3 次“MIME 解析器”或类似内容。

【讨论】:

    【解决方案3】:

    我为此使用HTTP::MultiPartParser。也许它对您的用例也有好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多