如何通过Content-Id获取PHP CURL的多部分响应的附件

时间:2011-07-21 15:33:36

标签: php curl multipart

我无法弄清楚如何有效地获得多部分http响应的特定部分。 我试图通过PHPCURL发送SOAP从Jasper Reports服务器获取PDF报告,我没有在CURL文档中找到如何处理多部分响应。 我想在下面的“报告”部分RAW回复。 谢谢你的帮助。 伊利亚斯

------=_Part_6_9317140.1311257231623
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <B33D7700BFCF12CC2A64A7F6FB84CEAE

sutffs here
------=_Part_6_9317140.1311257231623
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-Id: <**report**>

binary PDF content here

2 个答案:

答案 0 :(得分:0)

试试这个:

<?php
$str = '------=_Part_6_9317140.1311257231623
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <B33D7700BFCF12CC2A64A7F6FB84CEAE

sutffs here
------=_Part_6_9317140.1311257231623
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-Id: <**report**>

binary PDF content here';

$pattern =  '%Content-Type: application/pdf'."\n".
            'Content-Transfer-Encoding: binary'."\n".
            'Content-Id: ([^\s]+)%';

preg_match($pattern, $str, $matches);
echo $matches[1];
?>

但是,我不保证其可靠性,因为返回字符串的结构可能随时发生变化。

答案 1 :(得分:0)

我修改了一个像Shef这样的小解决方案:

$pattern =  "/report>\r\n\r\n/";
$matches = preg_split($pattern, $output);
file_put_contents('c:/report.pdf', $matches[1]);

它现在有效。谢谢Shef。