AS2Secure从标头中删除多部分/签名内容类型

时间:2015-09-25 23:10:49

标签: php content-type edi

我尝试使用PHP lib AS2Secure接收AS2 MDN。消息到达并解码就好了,但是当响应消失时它会剥离主" multipart / signed"来自Content-Type的价值。

例如,类似这样的东西应该在主标题中指定一个多部分消息:

Content-Type: multipart/signed; boundary="----=_Part_8f23d0b4-8a42-4946-9928-4d12d9f7fc66.63"; protocol="application/pkcs7-signature"; micalg=SHA1

但是,当多部分消息的响应消失时,我只在主标题中看到这一点:

Content-Type: text/html; charset=UTF-8

这会在远程服务器中触发错误,该错误要求邮件将其内容类型指定为多部分。

我在AS2MDN.php中跟踪了将多部分内容类型剥离到此代码:

// TODO : replace with futur AS2MimePart to separate content from header
if (strpos($content, "\n\n") !== false) $content = substr($content, strpos($content, "\n\n") + 2);

如果我删除此代码,则会在正文中显示缺少的Content-Type: multipart/signed行,但Content-Type: text/html仍显示在标题中。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是由PHP Laravel框架(处理应用程序的路由)在输出期间覆盖标题引起的。

handle()中的AS2server.php方法中更改此代码:

ob_end_clean();
// send headers
foreach ($mdn->getHeaders() as $key => $value) {
    $header = str_replace(["\r", "\n", "\r\n"], '', $key . ': ' . $value);
    header($header);
}

// output MDN
echo $mdn->getContent();

...对这个Laravel友好代码:

$headers = [];

foreach ($mdn->getHeaders() as $key => $value) {
    $headers[str_replace(["\r", "\n", "\r\n"], '', $key)] = str_replace(["\r", "\n", "\r\n"], '', $value);
}

return \Response::make($mdn->getContent(), 200, $headers); // Use native Laravel response.

......解决了这个问题!